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();
}
Посмотрите, в этом случае, запуск этого метода повторяется и быстро может вызвать тупик, который замораживает весь пользовательский интерфейс.
Но если я изменю на lock(AnyOtherControl)
Независимо от того, как я запускаю метод, это не приведет к тупику.
Может ли кто-нибудь объяснить, что произошло, и объяснить разницу между этими двумя случаями. (особенно почему тупик больше не выходит, блокируя другой элемент управления).