Kinect デバイスからビデオを受信しています。サーバーはフレームごとにビデオを送信し、クライアント側ではフレームを受信しますが、BitmapSource を使用するとイメージ コントロールでちらつき始めます。その後、CPU 使用率の増加を担当する関数を作成し、WriteableBitmap クラスを使用しましたが、新しい問題が発生しました。「呼び出し元のスレッドはオブジェクトにアクセスできませんが、別のスレッドがそれを所有しています」というエラーが表示されます。dispather.invoke を使用します。問題を解決するために、同じエラーが発生しています。
public partial class MainWindow : Window { TcpClient クライアント; NetworkStream ns; スレッドビデオフレーム; WriteableBitmap vediofram = null;
public MainWindow()
{
InitializeComponent();
client = new TcpClient();
client.Connect("127.0.0.1", 9000);
vedioframe = new Thread(Display_Frame);
vedioframe.Start();
}
public void Display_Frame()
{
ns = client.GetStream();
while (true)
{
byte[] vedio = new byte[1228800];
ns.Read(vedio, 0, vedio.Length);
try
{
if (vediofram == null)
{
vediofram = new WriteableBitmap(640, 480, 96, 96, PixelFormats.Bgr32, null);
}
else
{
vediofram.WritePixels(new Int32Rect(0, 0, 640, 480), vedio, 640 * 4, 0);
}
Update_Frame(vediofram);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
// Dispatcher.Invoke(new Action(() => { BitmapSource s = BitmapSource.Create(640, 480, 96, 96, PixelFormats.Bgr32, null, vedio, 640 * 4);
// Vedio.Source = s;
/// }));
}
}
void Update_Frame(WriteableBitmap src)
{
Dispatcher.Invoke(new Action(() => { Vedio.Source = src; }));
}
}