var t = new Thread(new ParameterizedThreadStart(DoWork));
t.SetApartmentState(ApartmentState.STA);
t.IsBackground = true;
t.Start(App.Current.MainWindow);
public static void DoWork(object owner)
{
var progressDlg = new ProgressBarDialog();
// progressDlg.Owner = (Window)owner; // This doesn't work
progressDlg.ShowDialog();
}
现在,请告诉我,是否可以使它工作?
示例中的App.Current.MainWindow无法从另一个线程访问。
而且我也听说过Parallel.Invoke()的新酷方式,但我不知道是否适用于这种情况。如果你告诉我它是如何工作的,我感激不尽。
答案 0 :(得分:0)
无法从后台线程访问UI,所有更新都必须在主线程上。这包括设置依赖项属性,就像您在上述情况中尝试做的那样。您可以使用Dispatcher来解决这个问题。
像这样的东西
Action x = (Action)delegate {
//do my UI updating
};
Dispatcher.Invoke(x, new object[] { });
这是我给here...
的答案