gpt4 book ai didi

c# - 这是 .net Monitor/lock 语句中的错误还是 MessageBox.Show 的行为不同?

转载 作者:太空狗 更新时间:2023-10-30 00:59:23 24 4
gpt4 key购买 nike

假设您在获胜表单上有两个按钮。当用户使用以下代码按下“按钮 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,它将一次只执行一个语句,其他线程将等待,一次一个。

最佳答案

由于当 InvokeRequired 为 false 时执行锁定语句,所有锁定都将在同一个(主)线程上运行。因此锁不会阻塞。

如果您希望 MessageBox 阻塞,请改用 ShowDialog。

关于c# - 这是 .net Monitor/lock 语句中的错误还是 MessageBox.Show 的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com