通知FindFiles进程何时完成

时间:2011-12-09 00:40:00

标签: c# asp.net-mvc multithreading

我有一个多线程应用程序,我已经创建了一个生产者/消费者模式来处理XML文件等

我想知道的是,对UI进行更新以及流程何时融化的好方法。

我是否应该采用线程方法创建Barrier并等待所有任务完成,或者我应该创建一个事件/委托并获取UI来捕获UI更新/强制

2 个答案:

答案 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上显示更新,以便用户知道发生了什么。如果用户可能正在等待的事情发生,那么进度条也很好。如果您没有很好的方法来指示真正的进展,进度条可以只是一个选取框。

相关问题