Почему блокировка самого элемента управления и синхронный доступ к нему могут привести к тупику? - PullRequest
0 голосов
/ 22 января 2020
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) Независимо от того, как я запускаю метод, это не приведет к тупику.

Может ли кто-нибудь объяснить, что произошло, и объяснить разницу между этими двумя случаями. (особенно почему тупик больше не выходит, блокируя другой элемент управления).

...