C# 为什么锁定控件本身并同步访问它会导致死锁? private void按钮\u单击(对象发送者,事件参数e) { 线程t=新线程(()=> { 对于(int i=0;i
在这种情况下,反复快速运行这个方法可能会导致死锁,从而冻结整个UI 但是,如果我更改为C# 为什么锁定控件本身并同步访问它会导致死锁? private void按钮\u单击(对象发送者,事件参数e) { 线程t=新线程(()=> { 对于(int i=0;i,c#,.net,winforms,asynchronous,deadlock,C#,.net,Winforms,Asynchronous,Deadlock,在这种情况下,反复快速运行这个方法可能会导致死锁,从而冻结整个UI 但是,如果我更改为lock(AnyOtherControl),无论我如何运行该方法,它都不会导致死锁 有谁能解释一下发生了什么,并说出这两起案件之间的区别吗。(特别是为什么死锁不再锁定不同的控件)。我认为这是因为Invoke()也试图锁定控件?只需使用您自己的锁对象,这样您就可以确切地知道它的用途。您应该在专门用于锁定的对象上调用锁,而不是在控件上调用锁。 private void Button_Click(object sen
lock(AnyOtherControl)
,无论我如何运行该方法,它都不会导致死锁
有谁能解释一下发生了什么,并说出这两起案件之间的区别吗。(特别是为什么死锁不再锁定不同的控件)。我认为这是因为Invoke()也试图锁定控件?只需使用您自己的锁对象,这样您就可以确切地知道它的用途。您应该在专门用于锁定的对象上调用锁,而不是在控件上调用锁。
private void Button_Click(object sender, EventArgs e)
{
Thread t = new Thread(() =>
{
for (int i = 0; i < 15; i++)
{
Thread.Sleep(30);
lock (lstDownload)
{
ListViewItem lvi = new ListViewItem(i.ToString());
Invoke((MethodInvoker)delegate
{
lstDownload.Items.Add(lvi);
});
}
}
});
t.IsBackground = true;
t.Start();
}