2
私はWritableBitmapを持っています。これは、特にイベントに応じて別のスレッドで更新されます。そのまま、Lock()
コマンドはSystem.InvalidOperationException
をスロー別スレッドで実行WritableBitmapは別のスレッドでは動作しませんか?
myWritableBitmap.Lock();
CopyMemory(myWritableBitmap.BackBuffer, ...);
myWritableBitmap.AddDirtyRect(...);
myWritableBitmap.Unlock();
。
私はこのように同じコードを実行した場合:
this.Dispatcher.Invoke(new VoidDelegate(delegate
{
//Same code as above...
}));
をなし、例外がスローされないと、コードが完全に実行されています。 Lock()の目的は、マルチスレッドアクセスを許可するのではないでしょうか?なぜこれが起こっているのか?
ロックはどんな描画をしてはいけません。私はバックバッファにメモリをコピーすることができ、UIスレッドで描画されると仮定します。 –
私は、WPFで見つかった描画機能の多くが、COMベースのコードを使用していることを考えています。これは、STAThreadから呼び出す必要があります。 – HakonB
これは、Apartment = STAの新しいスレッドで上記のコードを生成することができますか? –