用于创建线程和阻止UI

时间:2014-03-05 02:58:38

标签: c# multithreading winforms

我已经开始了多线程的特殊课程,但我有一些我想要清理的基本问题。说我有一个帖子

Thread t1 = new Thread(() =>  
            {
                Thread.CurrentThread.IsBackground = true;
                IsCancel = false;
                this.workProj.DoWorkWithRefSync(ref IsCancel); 
            });             
t1.Start();

其次是

while(t1.IsAlive)
{
}

t1.Join();

myAutoResetEvent.WaitOne();  // myAutoResetEvent.Set() called in thread when it finished processing

我不确定但是,这可能不是一个很好的例子,但期待一个。 我知道它们都是来自后台线程的某种形式的信令,以通知调用/ UI线程工作已完成。  但是使用它们最终会阻塞UI,直到线程完成。所以我想知道一个真实的生活场景实现。 我在想为什么不在UI线程上运行这个过程,因为你不介意阻止它。 编辑:换句话说,我正在寻找这些阻塞元素的真正用途,如thread.Join()等

1 个答案:

答案 0 :(得分:2)

与您的示例相关的真实场景将是对线程的引用存储在窗口类的成员中的位置,并且如果某些事件触发(例如关闭窗口或应用程序退出),则会检查或等待它。

伪代码:

class Window
{
     private Thread _thread = null;

     public void OnButtonClick()
     {
         _thread = CreateAndStartThread();
     }

     public void OnCloseWindow()
     {
         if(null != _thread)
             _thread.Wait();
     }
}