в Silverlight я пытаюсь получить кадры потока с веб-камеры (в прямом эфире), текстурированные на серии 3D-квадратов. Я использую VideoSink в классе контроллера веб-камеры в классе контроллера веб-камеры. Затем я рисую четырехугольники в DrawingSurface. Но я продолжаю работать в CrossAppDomainMarshaledException. В качестве решения я пытаюсь использовать Dispatcher.BeginInvoke, но иногда кажется, что код в BeginInvoke перескакивает через поток или выходит из него. Как человек относится к таким вещам?
//Video sink capture
// Is called every time the webcam provides a complete frame (Push)
protected override void OnSample(long sampleTime, long frameDuration, byte[] sampleData)
{
System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
{
WriteableBitmap bmp = new WriteableBitmap(vidFormat.PixelWidth, vidFormat.PixelHeight);
RaiseFrameCapture(new FrameCapturedEventArgs { Frame = bmp.FromByteArray(sampleData) });
});
}
//Capture from sink into WebCamController
void sink_FrameCaptured(object sender, FrameCapturedEventArgs e)
{
//List<WriteableBitmap>
_WebCamSource.AddImage(e.Frame.Clone());
}
//XNA draw event handler
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
List<WriteableBitmap> frames = new List<WriteableBitmap>();
if (webCamSource.Frames.Count > 0)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
frames = new List<WriteableBitmap>(webCamSource.Frames.ToArray());
});
}
Draw(frames);
e.InvalidateSurface();
}