2009-05-05 37 views
2

我有一個WritableBitmap更新在一個單獨的線程,特別是響應一個事件。WritableBitmap不適用於單獨的線程?

myWritableBitmap.Lock(); 
CopyMemory(myWritableBitmap.BackBuffer, ...); 
myWritableBitmap.AddDirtyRect(...); 
myWritableBitmap.Unlock();

當在單獨的線程上運行,不被所述Lock()命令拋出一個System.InvalidOperationException

如果我運行相同的代碼是這樣的:

this.Dispatcher.Invoke(new VoidDelegate(delegate 
{ 
    //Same code as above... 
}));

沒有異常拋出和代碼運行完美。 Lock()的目的不是允許多線程訪問嗎?任何想法爲什麼發生這種情況?

回答

2

許多WPF繪圖函數必須在STAThread中運行。第二段代碼使您的繪圖函數在主UI線程中運行。

編輯:更多關於線程在WPF發現here

+0

鎖應該不會做任何繪圖。我會假設我可以將內存複製到後臺緩衝區,然後將它繪製在UI線程上。 – 2009-05-05 19:48:09

相關問題