我有一個關於WPF中的跨線程調用的問題。WPF跨線程對象訪問
foreach (RadioButton r in StatusButtonList)
{
StatusType status = null;
r.Dispatcher.Invoke(new ThreadStart(() => status= ((StatusButtonProperties)r.Tag).StatusInformation));
if (AppLogic.CurrentStatus == null || AppLogic.CurrentStatus.IsStatusNextLogical(status.Code))
{
SolidColorBrush green = new SolidColorBrush(Color.FromRgb(102, 255, 102));
r.Dispatcher.Invoke(new ThreadStart(() => r.Background = green));
}
else
{
SolidColorBrush red = new SolidColorBrush(Color.FromRgb(255, 0, 0));
r.Dispatcher.Invoke(new ThreadStart(() => r.Background = red));
}
}
當我運行此代碼時,它在第一次迭代中正常工作。然而在第二次迭代行:
r.Dispatcher.Invoke(new ThreadStart(() => status= ((StatusButtonProperties)r.Tag).StatusInformation))
導致此異常:
Cannot use a DependencyObject that belongs to a different thread than its parent Freezable.
我已經嘗試了一些解決方案,但我找不到任何可行的。
任何幫助表示讚賞!
在與r.Dispatcher.Invoke不同的線程中創建SolidColorBrush紅色+綠色...? – 2011-05-03 11:04:42
爲什麼你使用這些設置器的新線程?由於您正在使用Invoke(),因此它會阻塞,直到該線程完成其工作,因此它可能會減慢整個過程。 – 2011-05-03 11:06:55