C# CLR20R3 程序终止的几种解决方案

论坛 期权论坛     
匿名技术用户   2021-1-11 22:24   29   0
<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> &lt;configuration&gt;
<span style="color:#008080;">2</span>   &lt;runtime&gt;
<span style="color:#008080;">3</span>     &lt;legacyUnhandledExceptionPolicy enabled&#61;<span style="color:#800000;">&#34;</span><span style="color:#800000;">true</span><span style="color:#800000;">&#34;</span> /&gt;
<span style="color:#008080;">4</span>   &lt;/runtime&gt;
<span style="color:#008080;">5</span> &lt;/configuration&gt;</pre>
</div>
<p>2. 在应用程序配置文件中,添加如下内容:</p>
<div class="cnblogs_code">
  <pre class="blockcode"><span style="color:#008080;">1</span> &lt;configuration&gt;
<span style="color:#008080;">2</span>   &lt;startup&gt;
<span style="color:#008080;">3</span>     &lt;supportedRuntime version&#61;<span style="color:#800000;">&#34;</span><span style="color:#800000;">v1.1.4322</span><span style="color:#800000;">&#34;</span>/&gt;
<span style="color:#008080;">4</span>   &lt;/startup&gt;
<span style="color:#008080;">5</span> &lt;/configuration&gt;</pre>
</div>
<p>3. 使用Application.ThreadException事件在异常导致程序退出前截获异常。示例如下:</p>
<div class="cnblogs_code">
  <pre class="blockcode"><span style="color:#008080;">1</span> [SecurityPermission(SecurityAction.Demand, Flags &#61;<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 &#43;&#61; <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 &#43;&#61; <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 &#61;<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 &#61; ShowThreadExceptionDialog(<span style="color:#800000;">&#34;</span><span style="color:#800000;">Windows Forms Error</span><span style="color:#800000;">&#34;</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;">&#34;</span><span style="color:#800000;">Fatal Windows Forms Error</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,
</span><span style="color:#008080;">13</span>                 <span style="color:#800000;">&#34;</span><span style="color:#800000;">Fatal Windows Forms Error</span><span style="color:#800000;">&#34;</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:#
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP