アプリケーションにローダーを実装しようとしていWPF
ます。いくつかの重い操作中に UI スレッドがフリーズするため、スレッドを使用してローダーを実装する必要がありました。ローダーがロードされるたびに、新しいスレッドが作成され、ローダーがオフになると、このスレッドは (手動で) 中止されます。私が直面している問題は、時々アプリケーションがクラッシュしてThreadAbortException
.
これは、ローダーを開始するコードです。
try
{
//if(newWindowThread !=null && !newWindowThread.IsAlive) { }
newWindowThread = new Thread(new ThreadStart(() =>
{
try
{
// Create and show the Window
awq = new BusyIndicatorDisguise(BusyMessage);
awq.Show(); // <== POINT WHERE THE EXCEPTION IS THROWN
//Start the Dispatcher Processing
if (!isDispatcherStarted)
{
var a = Thread.CurrentThread;
var b = Dispatcher.CurrentDispatcher;
//isDispatcherStarted = true;
Dispatcher.Run();
}
}
catch (ThreadAbortException thEx)
{
}
catch (Exception ex)
{
}
}
));
// Set the apartment state
newWindowThread.SetApartmentState(ApartmentState.STA);
// Make the thread a background thread
newWindowThread.IsBackground = true;
// Start the thread
newWindowThread.Start();
}
catch (Exception ex)
{
}
このコードはローダーを停止するためのものです:
if (newWindowThread != null && newWindowThread.IsAlive)
{
newWindowThread.Abort();
}
catch ブロックでこの例外をキャッチできません。別スレにあるからかな。ThreadAbortException を回避する方法を知りたい