我有一个多线程应用程序,我已经创建了一个生产者/消费者模式来处理XML文件等
我想知道的是,对UI进行更新以及流程何时融化的好方法。
我是否应该采用线程方法创建Barrier并等待所有任务完成,或者我应该创建一个事件/委托并获取UI来捕获UI更新/强制
答案 0 :(得分:1)
您可以结帐Signalr,以便您向客户提供PUSH通知。
答案 1 :(得分:0)
很抱歉,这个答案是假设Windows Forms,因为最初没有asp.net标签。希望有人也能为asp.net提供一个好的答案。
您可以使用Form.Invoke()从非GUI线程更新内容,这是一个简单的示例:
private void Form1_Load(object sender, EventArgs e)
{
Thread thread = new Thread(DoStuff);
thread.Start();
}
void DoStuff()
{
Thread.Sleep(1000);
this.Invoke(new Action(() => MessageBox.Show("Hey, this was invoked")));
}
使用Invoke,您可以使用Form执行任何操作,它在表单的线程中运行调用的操作。因此,您可以更改状态文本或其他任何方式。当然,你不应该在Form类中有你的“业务逻辑”,你不应该使用Thread.Sleep,我只是展示了你可以用这种方式回调UI线程的基本事实。 / p>
至于你是否应该在做任何事情之前等待所有任务完成,或者在执行时显示状态更新,这完全取决于你。我希望在可能的情况下在UI上显示更新,以便用户知道发生了什么。如果用户可能正在等待的事情发生,那么进度条也很好。如果您没有很好的方法来指示真正的进展,进度条可以只是一个选取框。