人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

開心,捕捉子線程內(nèi)異常的例子

開心,捕捉子線程內(nèi)異常的例子

更新時間:2022-10-10 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

程序很簡單,一個form內(nèi)有一個按鈕,點擊后彈出一個對話框,點擊對話框start按鈕后執(zhí)行新起一個線程執(zhí)行一個工作類的某個方法,這個方法故意拋出異常,然后在對話框內(nèi)捕捉到這個異常。
注意,這兒我是用事件來捕捉異常,這只是其中一種方法

form 的代碼
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace CatchThreadError
{
/// <summary>
/// Form1 的摘要說明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnTest;
/// <summary>
/// 必需的設(shè)計器變量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows 窗體設(shè)計器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 調(diào)用后添加任何構(gòu)造函數(shù)代碼
//
}

/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </summary>
private void InitializeComponent()
{
this.btnTest = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnTest
//
this.btnTest.Location = new System.Drawing.Point(192, 96);
this.btnTest.Name = "btnTest";
this.btnTest.TabIndex = 0;
this.btnTest.Text = "Test";
this.btnTest.Click += new System.EventHandler(this.btnTest_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(392, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.btnTest});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 應(yīng)用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void btnTest_Click(object sender, System.EventArgs e)
{
TestDialog td = new TestDialog() ;
try
{
td.ShowDialog() ;
}
catch(Exception exp)
{
MessageBox.Show("all done") ;
}
}
}
}


dialog的代碼
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading ;

namespace CatchThreadError
{
/// <summary>
/// TestDialog 的摘要說明。
/// </summary>
public class TestDialog : System.Windows.Forms.Form
{
private System.Windows.Forms.Button btnStart;
private System.Windows.Forms.Button btnClose;
/// <summary>
/// 必需的設(shè)計器變量。
/// </summary>
private System.ComponentModel.Container components = null;

public TestDialog()
{
//
// Windows 窗體設(shè)計器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 調(diào)用后添加任何構(gòu)造函數(shù)代碼
//
}

/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// 設(shè)計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內(nèi)容。
/// </summary>
private void InitializeComponent()
{
this.btnStart = new System.Windows.Forms.Button();
this.btnClose = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// btnStart
//
this.btnStart.Location = new System.Drawing.Point(72, 32);
this.btnStart.Name = "btnStart";
this.btnStart.TabIndex = 1;
this.btnStart.Text = "Start";
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
//
// btnClose
//
this.btnClose.Location = new System.Drawing.Point(200, 32);
this.btnClose.Name = "btnClose";
this.btnClose.TabIndex = 2;
this.btnClose.Text = "Close";
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// TestDialog
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(400, 94);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.btnClose,
this.btnStart});
this.Name = "TestDialog";
this.Text = "TestDialog";
this.ResumeLayout(false);

}
#endregion

private void btnClose_Click(object sender, System.EventArgs e)
{
this.Close() ;
}

private void btnStart_Click(object sender, System.EventArgs e)
{
TestClass testClass = new TestClass() ;
testClass.ThrowException += new ExceptionEventHandler(OnException) ;
Thread thread = new Thread(new ThreadStart(testClass.Run)) ;
thread.Start() ;
thread.Join() ;
}

public void OnException(ExceptionEventArgs e)
{
MessageBox.Show("程序運行出錯:" + e.MyException.ToString()) ;
this.Close() ;
}

}//end class

/// <summary>
/// 錯誤捕捉委托
/// </summary>
public delegate void ExceptionEventHandler(ExceptionEventArgs e) ;


/// <summary>
/// 工作類
/// </summary>
public class TestClass
{
/// <summary>
/// 委托
/// </summary>
public event ExceptionEventHandler ThrowException ;

/// <summary>
/// 委托方法
/// </summary>
/// <param name="e"></param>
protected virtual void OnThrowException(ExceptionEventArgs e)
{
if(ThrowException != null)
{
ThrowException(e) ;
}
}

/// <summary>
/// 工作方法
/// </summary>
public void Run()
{
try
{
for(int i = 0 ; i < 100 ; i ++)
{
Console.WriteLine("執(zhí)行到:{0}" , i) ;
Thread.Sleep(100) ;
if(i == 50)
{
throw(new Exception("error")) ;
}
}
}
catch(Exception e)
{
ExceptionEventArgs exp = new ExceptionEventArgs() ;
exp.MyException = e ;
OnThrowException(exp) ;
}
}//end method
}//end class

/// <summary>
///
/// </summary>
public class ExceptionEventArgs:EventArgs
{
private Exception m_objMyExcepiton ;

public Exception MyException
{
get
{
return this.m_objMyExcepiton;
}
set
{
this.m_objMyExcepiton = value ;
}
}
}//end class
}//end namespace

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 定陶县| 老河口市| 明星| 班戈县| 城市| 灵山县| 武平县| 来宾市| 明溪县| 佛坪县| 娄底市| 屏东市| 车致| 阜新市| 安乡县| 会泽县| 邯郸县| 青田县| 岳阳县| 莱州市| 周宁县| 遂昌县| 体育| 皋兰县| 张家界市| 平武县| 永修县| 石屏县| 清新县| 山西省| 南开区| 北海市| 阳江市| 晋中市| 广丰县| 开远市| 永修县| 武宁县| 瑞安市| 麻栗坡县| 长白|