【发布时间】:2017-04-12 08:19:32
【问题描述】:
您好,我正在使用 c# wpf。现在问题是线程。我无法访问 UI 元素的其他线程,并且当我使用 Dispatcher.BeginInvoke 时,我无法控制 Window。计算大约需要 5 分钟。我想将计算状态更新到 UI 进度条并自己移动窗口。谁能帮我。 :)
public delegate void TrainDelegate();
private void btnTrain_Click(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Background, new TrainDelegate(StartTrain));
}
在 StartTrain 函数中我调用了文本框。
喜欢关注
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(txtbTrainPath.Text);
它可以工作,但会阻止主窗口。他们说Begininvoke 是非阻塞调用。
请你帮助我好吗?这里应该改变什么?
【问题讨论】:
-
代码太少,无法分析哪里出错了。你可以多加一些。比如你如何在线程上执行计算等等。
-
我使用了最简单的调度方法
-
最好从 Dispatcher.Invoke 获取文本框内容(如果需要),然后以文本作为参数启动线程
-
主要问题是主窗口被阻塞。我想在运行这个长计算线程时移动主窗口。
标签: c# wpf multithreading user-interface