在终端服务器上中止线程时未处理的异常
本文关键字:未处理 异常 线程 终端 服务器 | 更新日期: 2023-09-27 18:34:45
在我们的程序中,初始屏幕用于单独的线程。当主线程完成某些作业时,它会中止启动线程。
这是代码:
if (thread != null && thread.IsAlive)
{
try
{
thread.Abort();
}
catch (ThreadAbortException)
{
Debug.WriteLine("Splash thread aborted");
}
}
在本地或网络计算机中使用时,它可以正常工作。
在终端服务器中使用时,我们得到以下异常:
System.Threading.ThreadAbortException, mscorlib, Version=2.0.0.0, 区域性=中性,公钥令牌=b77a5c561934e089
线程正在中止。
堆栈跟踪:
System.ServiceModel.Diagnostics.DiagnosticTrace.UnhandledExceptionHandler(Object sender, UnhandledExceptionEventArgs args)
MS.Win32.UnsafeNativeMethods.ITfMessagePump.GetMessageW(MSG& msg, Int32 hwnd, Int32 msgFilterMin, Int32 msgFilterMax, Boolean& result)
System.Windows.Threading.Dispatcher.GetMessage(MSG& msg, IntPtr hwnd, Int32 minMessage, Int32 maxMessage)
System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
System.Windows.Window.ShowHelper(Object booleanBox)
System.Windows.Window.Show()
System.Windows.Window.ShowDialog()
OurApplication.App.<>c__DisplayClass8.<Application_Startup>b__0()
System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
System.Threading.ThreadHelper.ThreadStart()
跟踪将此显示为未处理的异常,但它使用了一个捕获。它提出了一个问题,即它在终端服务器上的运行是否与它有关。
终端服务器是否创建以不同方式处理线程的特殊上下文?
终端服务器上下文似乎以不同的方式处理此类异常(它可能具有用于检测任何类型的异常的敏感设置(。
最终,我消除了线程中止并使用了基于事件的方法。它现在适用于本地计算机和终止服务器。