Представьте, что у вас есть две кнопки в форме выигрыша. Как, по вашему мнению, должно быть поведение, когда пользователь нажимает «кнопку 1» с приведенным ниже кодом?
Должно ли оно отображать все 5 окон сообщения за один раз или одно за другим - оператор MessageBox.Show находится внутри оператора блокировки?
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 каким-либо другим параметром, он будет выполнять оператор только по одному, другие потоки будут ждать по одному.