【发布时间】:2020-10-15 04:17:33
【问题描述】:
我浏览了互联网,发现了一个不错的解决方案,我将其合并到下面的代码中,但是它并不能完全满足我的要求,它仅在调用更新时有效,但我想在另一个中运行一个方法类然后让该方法调用将向 UI 报告的方法并传递一些信息,因此这个模型只是在运行操作之前更改按钮内容。
使用调度程序,我可以获得要更新的 UI 控件,但是我不只是希望这样做,我想执行一些功能然后进行 UI 更新。 所以可能有一些我没有得到的理论,我知道 Invoke 是一个同步操作并且突破了它运行但 UI 没有更新的代码。
主窗口 有一个按钮,内容为“CLICK ME”
代码背后
public partial class MainWindow : Window
{
public static Button windowButton;
public MainWindow()
{
InitializeComponent();
windowButton = btnStart;
}
private void btnStart_Click(object sender, RoutedEventArgs e)
{
// Run a Process in another class on a different Thread
ProcessClass processClass = new ProcessClass();
Task processTask = new Task(() =>
{
processClass.DoSomething();
});
processTask.Start();
}
}
}
进程类
class ProcessClass:MainWindow
{
public static void UpdateUI()
{
App.Current.Dispatcher.Invoke(delegate
{
windowButton.Content = "CHANGED CONTENT";
});
}
public void DoSomething()
{
UpdateUI();
int counter = 0;
for(int i = 1; i < 100; i++)
{
counter += i;
Thread.Sleep(100);
}
MessageBox.Show($"Task Completed, answer is {counter}");
}
}
【问题讨论】:
标签: c# wpf multithreading user-interface dispatcher