在终端服务器上中止线程时未处理的异常

本文关键字:未处理 异常 线程 终端 服务器 | 更新日期: 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()

跟踪将此显示为未处理的异常,但它使用了一个捕获。它提出了一个问题,即它在终端服务器上的运行是否与它有关。

终端服务器是否创建以不同方式处理线程的特殊上下文?

在终端服务器上中止线程时未处理的异常

终端服务器上下文似乎以不同的方式处理此类异常(它可能具有用于检测任何类型的异常的敏感设置(。

最终,我消除了线程中止并使用了基于事件的方法。它现在适用于本地计算机和终止服务器。