<div class="blogpost-body" id="cnblogs_post_body">
<p> 这是因为.NET Framework 1.0 和 1.1 这两个版本对许多未处理异常(例如,线程池线程中的未处理异常)提供支撑,而 Framework 2.0 版中,公共语言运行库允许线程中的多数未处理异常自然继续。在多数情况下,这意味着未处理异常会导致应用程序终止。</p>
<p><strong>一、C/S 解决方案(以下任何一种方法)</strong><br>1. 在应用程序配置文件中,添加如下内容:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;">1</span> <configuration>
<span style="color:#008080;">2</span> <runtime>
<span style="color:#008080;">3</span> <legacyUnhandledExceptionPolicy enabled=<span style="color:#800000;">"</span><span style="color:#800000;">true</span><span style="color:#800000;">"</span> />
<span style="color:#008080;">4</span> </runtime>
<span style="color:#008080;">5</span> </configuration></pre>
</div>
<p>2. 在应用程序配置文件中,添加如下内容:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;">1</span> <configuration>
<span style="color:#008080;">2</span> <startup>
<span style="color:#008080;">3</span> <supportedRuntime version=<span style="color:#800000;">"</span><span style="color:#800000;">v1.1.4322</span><span style="color:#800000;">"</span>/>
<span style="color:#008080;">4</span> </startup>
<span style="color:#008080;">5</span> </configuration></pre>
</div>
<p>3. 使用Application.ThreadException事件在异常导致程序退出前截获异常。示例如下:</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;">1</span> [SecurityPermission(SecurityAction.Demand, Flags =<span style="color:#000000;"> SecurityPermissionFlag.ControlAppDomain)]
</span><span style="color:#008080;">2</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Main(<span style="color:#0000ff;">string</span><span style="color:#000000;">[] args)
</span><span style="color:#008080;">3</span> <span style="color:#000000;">{
</span><span style="color:#008080;">4</span> Application.ThreadException += <span style="color:#0000ff;">new</span><span style="color:#000000;"> ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);
</span><span style="color:#008080;">5</span> <span style="color:#000000;"> Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
</span><span style="color:#008080;">6</span> AppDomain.CurrentDomain.UnhandledException += <span style="color:#0000ff;">new</span><span style="color:#000000;"> UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
</span><span style="color:#008080;">7</span>
<span style="color:#008080;">8</span> Application.Run(<span style="color:#0000ff;">new</span><span style="color:#000000;"> ErrorHandlerForm());
</span><span style="color:#008080;">9</span> }</pre>
</div>
<p>日志事件</p>
<div class="cnblogs_code">
<pre class="blockcode"><span style="color:#008080;"> 1</span> <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> Form1_UIThreadException(<span style="color:#0000ff;">object</span><span style="color:#000000;"> sender, ThreadExceptionEventArgs t)
</span><span style="color:#008080;"> 2</span> <span style="color:#000000;">{
</span><span style="color:#008080;"> 3</span> DialogResult result =<span style="color:#000000;"> DialogResult.Cancel;
</span><span style="color:#008080;"> 4</span> <span style="color:#0000ff;">try</span>
<span style="color:#008080;"> 5</span> <span style="color:#000000;"> {
</span><span style="color:#008080;"> 6</span> result = ShowThreadExceptionDialog(<span style="color:#800000;">"</span><span style="color:#800000;">Windows Forms Error</span><span style="color:#800000;">"</span><span style="color:#000000;">, t.Exception);
</span><span style="color:#008080;"> 7</span> <span style="color:#000000;"> }
</span><span style="color:#008080;"> 8</span> <span style="color:#0000ff;">catch</span>
<span style="color:#008080;"> 9</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">10</span> <span style="color:#0000ff;">try</span>
<span style="color:#008080;">11</span> <span style="color:#000000;"> {
</span><span style="color:#008080;">12</span> MessageBox.Show(<span style="color:#800000;">"</span><span style="color:#800000;">Fatal Windows Forms Error</span><span style="color:#800000;">"</span><span style="color:#000000;">,
</span><span style="color:#008080;">13</span> <span style="color:#800000;">"</span><span style="color:#800000;">Fatal Windows Forms Error</span><span style="color:#800000;">"</span><span style="color:#000000;">, MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
</span><span style="color:#008080;">14</span> <span style="color:#000000;"> }
</span><span style="color:#008080;">15</span> <span style="color:#0000ff;">finally</span>
<span style="color:#008080;">16</span> <span style="color:#000000;"> {
</span><span style="color:# |
|