这个帖子名称相同但目的不同 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.Show("b")
之前,事件会调用另一个MsgBox实例,从而导致a,a,a,b,b,b
答案 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
应用程序来理解线程的工作原理。