想象一下,您在赢单上有两个按钮。当用户使用以下代码按下“按钮 1”时,您认为应该是什么行为?
它应该一次显示所有 5 个消息框,还是一个一个地显示 - MessageBox.Show 语句在 lock 语句中?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static readonly object lockobject = new object();
private void button1_Click(object sender, EventArgs e)
{
var action = new Action(function);
for(int i = 0; i< 5; i++)
{
action.BeginInvoke(null, null);
}
}
private void function()
{
if (button2.InvokeRequired)
{
var func = new Action(function);
button2.Invoke(func);
}
else
{
lock (lockobject)
{
MessageBox.Show("Testing");
}
}
}
}
现在,如果我们将 MessageBox.Show 替换为任何其他语句,它将一次只执行一个语句,其他线程将等待,一次一个。