从静态方法修改UI线程的控制(回调)

时间:2016-01-13 21:06:23

标签: wpf multithreading controls

我刚修改了一个我的工具来启动一个新的Thread而不是在静态类中运行静态方法。当然,我得到错误,因为这个新线程无法访问其他线程。

但是,我现在如何调整以下代码对MainWindow / UI Thread进行分离呢?

主题t =新主题(()=> ParityHelper.MakeRequest(pack));

在静态类中,我现在命令这样的UI控件:

(适用(主窗口)System.Windows.Application.Current.MainWindow).ListOfTestsBox.Items.Add( “COOL”);

2 个答案:

答案 0 :(得分:1)

如果要与UI线程中的对象进行交互,则应使用Dispatcher(https://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke(v=vs.110).aspx)。例如:

Thread t = new Thread(() => Dispatcher.Invoke(() => ParityHelper.MakeRequest(pack)));

答案 1 :(得分:0)

// MainWindow.xaml.cs

public static MainWindow MainUI;

    public MainWindow()
    {
        InitializeComponent();
        MainUI = this;  // <---- IMPORTANT
    }

//在另一个类中(在线程中运行)

    public delegate void DelTest();

    public static void Test()
    {
        Dispatcher.CurrentDispatcher.Invoke(
            DispatcherPriority.Normal,
            new DelTest(ParityChecker.MainWindow.MainUI.Tester)); 
}