В моем приложении есть нить, которая в течение некоторого времени отображает диалоговое окно «Пожалуйста, подождите», иногда это очень маленький промежуток времени, и при рисовании пользовательского интерфейса есть некоторые затруднения (я думаю).
Я получаю исключение "Поток был прерван" и совершенно не знаю, как от него избавиться. Я имею в виду поймать это исключение каким-либо образом или каким-либо другим способом скрыть его от пользователя. Это исключение не имеет ничего общего с остальной частью моего приложения, и эта ошибка никак не влияет на него. Появляется случайным образом, и восстановить его по вызову сложно.
Я пытался различными способами перехватить это исключение рядом с кодом, который запускает и останавливает поток с диалоговым окном, но кажется, что ошибка, по-видимому, связана с другим потоком, который выводит окно в моем недавно созданном потоке.
Вот пример кода, часть статического класса с полезными вещами, конечно, я не говорю, что это хороший способ решить такую «занятую» ситуацию, но я хочу решить эту проблему. Thread.Sleep (500); или другие улучшения try / catch не помогают мне избежать этого исключения потока.
public static bool alreadyBusy = false;
public static BusyIndicator bi = new BusyIndicator("");
public static Thread backgroundOpertionThread;
public static void showBusy(bool isBusy, System.Windows.Forms.Form hostform, string message)
{
Common.busyMessage = message;
if (isBusy)
{
Common.alreadyBusy = true;
backgroundOpertionThread = new Thread(new ThreadStart(showBusy));
Thread.Sleep(500);
if (hostform != null)
{
hostform.Enabled = false;
hostform.SuspendLayout();
}
backgroundOpertionThread.Start();
}
else
{
backgroundOpertionThread.Abort();
Thread.Sleep(500);
Common.alreadyBusy = false;
if (hostform != null)
{
hostform.Enabled = true;
hostform.ResumeLayout();
}
}
}
public static void showBusy()
{
BusyIndicator bir = new BusyIndicator(Common.busyMessage);
bir.ShowDialog();
}
Есть идеи?