這是此後的Question。切換到WPF中的調度程序線程
我必須從一個不同的線程更新一個ObservableCollection。我用下面的代碼試了一下:
Thread t = new Thread(()=>
{
while(true)
{
if (ErrorDetection.ErrorDetectionIO.doErrorDetection() == 1)
{
dataLine = ErrorDetection.ErrorDetectionIO.getDataLine();
if (mainWindow != null)
{
ISynchronizeInvoke target = mainWindow; // mainWindow needs to be an WindowsForm?
target.Invoke(
(Action)(() =>
{
mainWindow.setNewDataLine(dataLine);
}
), null);
}
}
}
} );
t.IsBackground = true;
t.Start();
ErrorDetectionIO.doErrorDetection()是在C++/CLI .dll和調用本地C代碼。
setNewDataLine位於mainWindow上,並將一個Line添加到Observable集合中。
如果從不同線程調用它,則會導致異常: 「此類CollectionView不支持從與分派器線程不同的線程更改其SourceCollection。」
問題是ISynchronize Invoke似乎不適用於wpf? Threres編譯器錯誤消息,說明mainWindow不能轉換爲ISynchronizeInvoke。
如果我使用 ISynchronizeInvoke target = mainWindow as ISynchronizeInvoke;它可以編譯但目標爲空;
精彩,它的工作,謝謝 – user1550097 2012-07-30 16:50:46
標記爲回答比.. – Darek 2012-07-30 17:24:37