簡體   English   中英

線程異常處理

[英]Thread Exception handling

我在邏輯層中有一個函數,該函數可以通過另一個線程插入信息,並且我想在該線程中發生未知異常時將其拋出,但是問題是,在我的應用程序UnhandledExceptionEventHandler ,它獲得了一般異常,但它給出了此錯誤,我也不想關閉應用程序:

調用線程必須是STA,因為許多UI組件都需要STA

///////////////////// this is my function in logical layer //////////
public string MahaleInsert(Mahales Mahale)
{
    Thread t = new Thread(delegate()
    {
        try
        {
            Mahale.OutMessage = DA_Agency.MahaleInsertDB(Mahale);
            Mahale.OutMessage = "SuccessInsert";
        }
        catch (Exception ex)
        {
            if (ex.Message.ToLower().Contains("violation of unique key constraint"))
                Mahale.OutMessage = "MahaleInsUniqueError";
            else
                throw;
        }
    });
    t.Start();
    t.Join();
    return Mahale.OutMessage;    
}

//////////////////////////// this in my aplication level  //////////////////
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    try
    {
        string messsage = GeneralMethod.CatchException(e.ExceptionObject as Exception);
        MessageClass.MessageBox(messsage);
    }
    catch
    {


    }
}

嘗試執行以下操作:

    public string MahaleInsert(Mahales Mahale)
    {
        Thread t = new Thread(new ThreadStart(ThreadBody));
        t.Start();
        t.Join();
        return Mahale.OutMessage;
    }
    [STAThread]
    void ThreadBody()
    {
        try
        {
            Mahale.OutMessage = DA_Agency.MahaleInsertDB(Mahale);
            Mahale.OutMessage = "SuccessInsert";
        }
        catch (Exception ex)
        {
            if (ex.Message.ToLower().Contains("violation of unique key constraint"))
                Mahale.OutMessage = "MahaleInsUniqueError";
            else
                throw;
        }
    }

    //////////////////////////// this in my aplication level  //////////////////
    void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        try
        {
            string messsage = GeneralMethod.CatchException(e.ExceptionObject as Exception);
            MessageClass.MessageBox(messsage);
        }
        catch
        {


        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM