在主线程中捕获线程的异常

本文关键字:线程 异常 | 更新日期: 2023-09-27 17:49:39

我有一个线程:
Thread mthread = new Thread(new ThreadStart(thread_main));
mthread.Start();

启动功能thread_main

void thread_main()
{
    if (BotSuite.ImageLibrary.Template.Image(screendata, invdata).IsEmpty)
    {
        throw new Exception();
    }
}

这个异常应该在主线程中捕获!我在按钮事件处理程序中添加了一行。

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(ErrorHandler);

如果异常在主线程中,它工作得很好,但如果它在mthread中,什么也不会发生!

我怎样才能解决这个问题?

在主线程中捕获线程的异常

如果你使用的是旧版本的Visual Studio或者不想使用Tasks,你可以使用Backroundworker

    var worker = new BackgroundWorker();
    worker.DoWork += WorkerDoWork;
    worker.RunWorkerCompleted += WorkerRunWorkerCompleted;
    worker.RunWorkerAsync();
    private static void WorkerDoWork(object sender, DoWorkEventArgs e)
    {
        throw new Exception("my exception");
    }
    private static void WorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            //error handling
        }
    }