线程 - 确保线程在C#中完成

时间:2014-07-11 11:19:41

标签: c# multithreading

这个帖子名称相同但目的不同 Threading - make sure the thread finishes

这是使用+ =。

附加到事件的方法
public void MsgBox(Int i, Int j)
{
     MessagBox.Show ("a");
     MessagBox.Show ("b"); //it was not MessageBox.Show ("b") in the original code.
     // It was something that is more time consuming for the computer
} 

我将获得值为a,a,a,b,b,b

的MessageBox

在做了一些调试之后,我意识到在调用MessageBox.Show("b")之前,事件会调用另一个MsgBox实例,从而导致a,a,a,b,b,b

2 个答案:

答案 0 :(得分:1)

我认为你希望在多个线程之间进行 syncronisation ,这样你就可以获得像

这样的输出
"ab ab ab"

而不是

"aa ab bb" or "aa ba bb" or "ab aa bb" ...

为此,您可以添加一个公共锁,以便所有线程都尝试获取相同的锁

// make sure there is only 1 instance of _obj shared between all threads
// one approach to do this would be to use a static object
private static object _obj = new object();

public void MsgBox(Int i, Int j)
{
    lock(_obj) 
    {
        MessagBox.Show ("a");
        Thread.Sleep(1000);   // simulate work
        MessagBox.Show ("b");
    }
}

答案 1 :(得分:0)

MessagBox.Show ("a");是一个阻塞代码,等待用户交互,而其他线程正在做某事。所以使用Console应用程序来理解线程的工作原理。