国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

C#自定義異常處理及寫入日志

開發(fā) 后端
本文將介紹C#自定義異常處理及寫入日志,System.ApplicationException 類是第三方定義的異常類,如果我們要自定義異常類,那么就應派生于它。

我們要站在異常一定可能會發(fā)生的角度來編寫C#自定義異常處理程序,應對程序有可能發(fā)生的錯誤建立一個良好的C#自定義異常處理策略。

在做C#自定義異常處理的時候,最好能在應用程序所有的入口處(事件處理函數(shù),主函數(shù),線程入口)使用try-catch。但是不要在程序構(gòu)造函數(shù)入口處添加try-catch,因為此處產(chǎn)生異常,它自己并沒有能力來處理,因為它還沒有構(gòu)造完畢,只能再向外層拋出異常。

但我們也不能盲目使用異常。而且使用異常,可能會在一定程度上影響到程序的性能(C#中使用異常一般不影響性能)。

  1. //自定義異常類  
  2. publicclassMyException:ApplicationException  
  3. {  
  4. publicMyException(stringmessage):base(message)  
  5. {  
  6. }  
  7.  
  8. publicMyException(stringmessage,ExceptioninnerException)  
  9. :base(message,innerException)  
  10. {  
  11. }  

全局異常處理、多線程中的異常處理
將全局異常處理函數(shù)的委托加入到Application.ThreadException中,實現(xiàn)全局異常處理,但它只能處理主線程中未捕獲的異常。在多線程異常處理時,工作線程/輔線程中產(chǎn)生異常,可以把它轉(zhuǎn)給主線程來完成異常處理。如果線程之間不通知,是無法直接捕捉異常的。若沒有去處理工作線程/輔線程中產(chǎn)生的異常,該異常將會“消失”掉。

為什么要把異常處理都交給主線程去做呢?舉個例子:在WinForm里我們使用多線程來處理界面元素,一旦有異常發(fā)生就將異常消息顯示出來。那么,是直接在異常發(fā)生后就MessageBox,還是將消息交給MainUI來統(tǒng)一顯示?試想一下,程序要是復雜點或是有多個界面采用多線程來顯示界面元素,那么采用前者,我們就算知道了異常的詳細信息,但可能還是很難找到究竟是哪里出了問題。而通過MainUI來顯示,情況就要好很多了,尤其是還設(shè)計到其他東西的時候(如:多語言環(huán)境)。當然,這個例子只是很小的一個方面。下面就來看怎么來實現(xiàn):

  1. usingSystem;  
  2. usingSystem.Drawing;  
  3. usingSystem.Collections;  
  4. usingSystem.ComponentModel;  
  5. usingSystem.Windows.Forms;  
  6. usingSystem.Data;  
  7. usingSystem.Threading;  
  8.  
  9. namespaceThreadApp  
  10. {  
  11. publicclassfrmMain:System.Windows.Forms.Form  
  12. {  
  13. privateSystem.Windows.Forms.ButtonbtRun;  
  14. /**////  
  15. ///必需的設(shè)計器變量。  
  16. ///  
  17. privateSystem.ComponentModel.Containercomponents=null;  
  18.  
  19. publicdelegatevoidWorkerThreadExceptionHandlerDelegate(Exceptione);  
  20. voidWorkerThreadExceptionHandler(Exceptione)  
  21. {  
  22. this.Text="Disposed.";  
  23. MainUIThreadExceptionHandler(this,newSystem.Threading.ThreadExceptionEventArgs(e));  
  24. }  
  25.  
  26. publicfrmMain()  
  27. {  
  28. InitializeComponent();  
  29. }  
  30.  
  31. /**////  
  32. ///清理所有正在使用的資源。  
  33. ///  
  34. protectedoverridevoidDispose(booldisposing)  
  35. {  
  36. if(disposing)  
  37. {  
  38. if(components!=null)  
  39. {  
  40. components.Dispose();  
  41. }  
  42. }  
  43. base.Dispose(disposing);  
  44. }  
  45.  
  46. Windows窗體設(shè)計器生成的代碼#regionWindows窗體設(shè)計器生成的代碼  
  47. /**////  
  48. ///設(shè)計器支持所需的方法-不要使用代碼編輯器修改  
  49. ///此方法的內(nèi)容。  
  50. ///  
  51. privatevoidInitializeComponent()  
  52. {  
  53. this.btRun=newSystem.Windows.Forms.Button();  
  54. this.SuspendLayout();  
  55. //  
  56. //btRun  
  57. //  
  58. this.btRun.Location=newSystem.Drawing.Point(72,24);  
  59. this.btRun.Name="btRun";  
  60. this.btRun.TabIndex=0;  
  61. this.btRun.Text="Run";  
  62. this.btRun.Click+=newSystem.EventHandler(this.btRun_Click);  
  63. //  
  64. //frmMain  
  65. //  
  66. this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);  
  67. this.ClientSize=newSystem.Drawing.Size(224,69);  
  68. this.Controls.Add(this.btRun);  
  69. this.Name="frmMain";  
  70. this.Text="ThreadApp";  
  71. this.ResumeLayout(false);  
  72.  
  73. }  
  74. #endregion  
  75.  
  76. /**////  
  77. ///應用程序的主入口點。  
  78. ///  
  79. [STAThread]  
  80. staticvoidMain()  
  81. {  
  82. Application.ThreadException+=newThreadExceptionEventHandler(MainUIThreadExceptionHandler);  
  83. Application.Run(newfrmMain());  
  84. }  
  85.  
  86. publicstaticvoidMainUIThreadExceptionHandler(Exceptione)  
  87. {  
  88. MainUIThreadExceptionHandler(null,newSystem.Threading.ThreadExceptionEventArgs(e));  
  89. }  
  90.  
  91. publicstaticvoidMainUIThreadExceptionHandler(objectsender,ThreadExceptionEventArgst)  
  92. {  
  93. MessageBox.Show(t.Exception.Message,"Exception",  
  94. MessageBoxButtons.OK,  
  95. MessageBoxIcon.Warning);  
  96. }  
  97.  
  98.  
  99. privatevoidThrowException()  
  100. {  
  101. thrownewNotImplementedException();  
  102. }  
  103.  
  104. privatevoidRun()  
  105. {  
  106. try 
  107. {  
  108. this.Text="Waiting";//[錯誤]這里在2.0里是編譯不通過的。因為它已經(jīng)違背了我們的原則——不要跨線程操作(當前線程對界面線程的元素進行了操所)  
  109. Thread.Sleep(2000);  
  110. this.Text="ThrowException";  
  111. ThrowException();  
  112. this.Text="Finished";//[錯誤](同上)  
  113. }  
  114. catch(Exceptione)  
  115. {  
  116.  
  117. //如果涉及到多線程的互操作時,  
  118. //可以運用BeginInvoke方法來實現(xiàn)多線程間的互訪問。  
  119. this.BeginInvoke(  
  120. newWorkerThreadExceptionHandlerDelegate(  
  121. WorkerThreadExceptionHandler),  
  122. newobject[]{e});}  
  123. }  
  124.  
  125. privatevoidbtRun_Click(objectsender,System.EventArgse)  
  126. {  
  127. ThreadStartts=newThreadStart(Run);  
  128. Threadt=newThread(ts);  
  129. t.Start();  
  130.  
  131. //thrownewNotSupportedException();  
  132. }  
  133. }  

【編輯推薦】

  1. 強類型和Actor:ActorLite的演示
  2. C#的Tag Message回顧:繁瑣而危險
  3. Erlang的Actor回顧:將消息轉(zhuǎn)化為邏輯執(zhí)行
  4. Actor模型的本質(zhì):究竟是要解決什么問題
  5. 順暢的使用C# Actor:另一個解決方案
責任編輯:彭凡 來源: cnblogs
相關(guān)推薦

2021-06-17 06:52:37

C#自定義異常

2024-08-02 10:21:32

C#Exception類自定義異常

2009-08-04 13:53:58

C#委托類C#事件

2009-08-04 09:56:46

C#事件處理自定義事件

2009-08-03 16:37:49

C#異常類

2009-08-04 08:58:01

C#自定義特性

2025-01-10 09:28:25

2009-09-03 15:46:57

C#自定義事件

2010-12-24 15:38:53

C#單例模式

2009-08-03 13:34:06

自定義C#控件

2009-08-28 17:45:19

C#自定義數(shù)據(jù)

2009-08-03 13:39:46

C#自定義用戶控件

2009-08-05 17:03:37

C#自定義控件

2009-08-04 12:56:51

C#自定義事件

2009-08-12 14:53:50

C#類型轉(zhuǎn)換函數(shù)

2009-08-04 12:40:34

c#自定義事件

2024-09-11 14:46:48

C#旋轉(zhuǎn)按鈕

2011-12-16 14:23:51

Java

2025-02-13 00:28:26

2009-08-04 13:31:35

C#自定義事件
點贊
收藏

51CTO技術(shù)棧公眾號

不卡视频一区二区| 北条麻妃av高潮尖叫在线观看| 中文字幕综合| 欧美色偷偷大香| 五月天丁香婷| 秋霞a级毛片在线看| 久久亚洲综合色一区二区三区| 手机在线观看国产精品| 国产一区二区三区自拍| 国产精品成人aaaaa网站| 国产精品视屏| 欧美高跟鞋交xxxxxhd| 四虎4545www精品视频| 亚洲高清av在线| 日本高清在线观看| 欧美videossexotv100| 成人在线播放视频| 欧美日韩一区小说| 久草免费在线观看| 日韩一区二区三区视频在线观看| 免费在线稳定资源站| 一本大道久久a久久精品综合| 情趣网站在线观看| 午夜激情久久久| 香蕉97视频观看在线观看| 亚洲成人高清在线| 欧美大片aaa| 欧美亚洲国产一区在线观看网站| 未来日记在线观看| 欧美图区在线视频| 精品国产白色丝袜高跟鞋| 91精品国产综合久久久久久久久久| 美国成人毛片| 欧美美女一区二区在线观看| 九七久久人人| 精品亚洲一区二区| 成人97精品毛片免费看| 91av视频在线免费观看| 日韩影院二区| 国产女主播一区二区| 久久资源在线| 国产精品久久中文字幕| 久久影院午夜片一区| а√最新版在线天堂| 欧美视频在线观看免费| 久久香蕉一区| 欧美极品在线视频| 午夜精品一区二区三区国产 | 欧美夫妻性生活| 北岛玲一区二区三区| 欧美久久一区二区| 24小时免费看片在线观看| 亚洲电影av在线| 最新日韩一区| 国产成人精品av在线| 伊人蜜桃色噜噜激情综合| 色婷婷精品国产一区二区三区| 福利一区二区在线| 99re热在线观看| 毛片网站在线观看| 欧洲亚洲成人| 午夜精品理论片| 欧美在线网站| 日韩video| 亚洲精品成人精品456| 在线观看黄色av| 北条麻妃久久精品| 欧美激情视频一区二区三区在线播放| 亚洲日本精品| 国产精品人妖ts系列视频| av福利精品| 欧美精品一区在线播放| 欧美日韩综合| 精品视频无码一区二区三区| 在线观看欧美黄色| 青青草国产一区二区三区| 91超碰rencao97精品| 99久久精品99国产精品| 国产h视频在线观看| 中文字幕少妇一区二区三区| 成人激情诱惑| 少妇久久久久久被弄到高潮| 依依成人精品视频| 日韩成人影音| 国产精品欧美久久| 久久精品人人做人人综合| av网站在线免费| 日韩av黄色在线观看| 国产高清不卡一区| 污黄网站在线观看| 欧美激情一区二区三区成人| 视频在线在亚洲| 116美女写真午夜一级久久| 亚洲欧美激情视频| 日韩午夜av在线| 日本女优北野望在线电影| 亚洲人在线观看| 99视频一区| 午夜刺激在线| 欧美日本黄视频| 免费男女羞羞的视频网站中文字幕| 亚洲精品国产电影| 国产一区二区三区四区三区四 | 天堂va蜜桃一区二区三区漫画版| 国产羞羞视频| 中文字幕av一区二区| 玖玖玖国产精品| 天堂av在线7| 2020欧美日韩在线视频| 国产91在线观看| 国产ktv在线视频| 美女一区视频| 欧美午夜精品电影| 国产韩国精品一区二区三区| 国产视频三区| 欧美最顶级丰满的aⅴ艳星| 99精品视频在线免费观看| 色偷偷色偷偷色偷偷在线视频| 久久99精品久久久久子伦| 日本精品一级二级| 国产亚洲一区二区三区啪| 在线视频日韩一区 | 99aiav| 另类色图亚洲色图| 成人免费视频国产在线观看| 97人澡人人添人人爽欧美| 麻豆av一区二区三区久久| 午夜久久久影院| 国语产色综合| 亚洲精选av在线| 国产欧美va欧美va香蕉在线| 亚洲国产成人精品视频| 日韩av二区| 最新天堂资源在线资源| 国产精品爱啪在线线免费观看 | 国产一区国产二区国产三区| 自拍偷拍21p| 91av在线免费观看| 国产精品卡一卡二卡三| 亚洲理论电影| 在线观看av中文| 99re国产| 欧美一区二区在线播放| 亚洲视频成人| 欧美v亚洲v| 91精品一区二区三区四区| 亚洲欧洲第一视频| 久久伊99综合婷婷久久伊| 国产精品网站在线看| xxx亚洲日本| 亚洲综合第一页| 欧美精品精品一区| 狠狠色丁香久久婷婷综合丁香| 日本少妇一区| 人人干人人干人人| 国产精品国产三级国产普通话蜜臀| 久久99成人| 国产美女视频黄a视频免费| 91精品视频在线| 在线综合视频播放| 粉嫩欧美一区二区三区| 国产精品久久久久久婷婷天堂| 伊人夜夜躁av伊人久久| 在线一区电影| 影音先锋男人在线资源| 亚洲一区 在线播放| 欧美大片第1页| 午夜私人影院久久久久| 久久久久国产精品一区二区 | 午夜免费一区二区| 日韩精品福利片午夜免费观看| 国产精品欧美激情| 欧美日韩第一页| 国产精品看片你懂得| 不卡一区综合视频| 黄色免费看片| 久久综合狠狠综合久久综青草| 日韩国产欧美精品一区二区三区| 93久久精品日日躁夜夜躁欧美| 西瓜成人精品人成网站| 欧美私人网站| 国产福利一区视频| 国产一区二区三区免费不卡| 伊人久久男人天堂| 精品二区三区线观看| 国产馆精品极品| 久久精品免费一区二区三区| 性欧美freehd18| 欧美老女人性开放| 黄色网页免费在线观看| 草莓视频一区| 欧美激情视频网址| 高清国产一区二区| 综合久久一区| www..com日韩| 7878视频在线观看| 免费观影入口看日本视频| 午夜爽爽爽男女免费观看影院| videoxxxx另类日本极品| 免费看黄色a级片|