Многопоточность - прерывание потока при событии WinForms

вы делаете ==, который сортирует типы для вас.

0 - это int, поэтому в этом случае он будет передавать 'e' в int. Который не обрабатывается как один, и станет 0. Строка '0e' станет 0 и будет соответствовать!

использовать ===

0
задан Mike Bruno 18 January 2019 в 15:57
поделиться

1 ответ

Вы можете сохранить ссылку на поток, а затем прервать поток перед тем, как начинать новый. Как это:

private Thread passwordClearThread = null;

private void getPassword(int lifeInSeconds)
{
  int maxLifeBarValue = lifeInSeconds * 10;

  if (passwordClearThread != null && passwordClearThread.IsAlive)
  {
    passwordClearThread.Abort();
    passwordClearThread.Join();
  }

  passwordClearThread = new Thread
  (() =>
  {
    //Initialize the progress bar
    Invoke((MethodInvoker)delegate
    {
      lifeBar.Maximum = maxLifeBarValue;
      lifeBar.Value = maxLifeBarValue;
      lifeBar.Visible = true;
      Clipboard.SetText(pd.getAccountPassword(lstAccounts.Text));
    });

    //Loop to update the progress bar
    for (int x = maxLifeBarValue; x >= 0; x--)
    {
      Thread.Sleep(100);
      Invoke((MethodInvoker)delegate
      {
        lifeBar.Value = x;
      });
    }

    //Clear the system clipboard
    Clipboard.Clear();

    //Hide the progress bar when we're done
    Invoke((MethodInvoker)delegate
    {
      lifeBar.Visible = false;
    });
  });
  passwordClearThread.SetApartmentState(ApartmentState.STA);
  passwordClearThread.Start();
}
0
ответ дан gunnerone 18 January 2019 в 15:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: