如何从另一个线程访问Window?

时间:2010-08-05 20:24:05

标签: wpf multithreading

    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()的新酷方式,但我不知道是否适用于这种情况。如果你告诉我它是如何工作的,我感激不尽。

1 个答案:

答案 0 :(得分:0)

无法从后台线程访问UI,所有更新都必须在主线程上。这包括设置依赖项属性,就像您在上述情况中尝试做的那样。您可以使用Dispatcher来解决这个问题。

像这样的东西

 Action x = (Action)delegate {
       //do my UI updating
    };
    Dispatcher.Invoke(x, new object[] { });

这是我给here...

的答案