我刚修改了一个我的工具来启动一个新的Thread而不是在静态类中运行静态方法。当然,我得到错误,因为这个新线程无法访问其他线程。
但是,我现在如何调整以下代码对MainWindow / UI Thread进行分离呢?
主题t =新主题(()=> ParityHelper.MakeRequest(pack));
在静态类中,我现在命令这样的UI控件:
(适用(主窗口)System.Windows.Application.Current.MainWindow).ListOfTestsBox.Items.Add( “COOL”);
答案 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));
}