gpt4 book ai didi

c# - 多线程异常处理

转载 作者:行者123 更新时间:2023-11-30 18:30:09 25 4
gpt4 key购买 nike

这是一个简单的程序:

class Program
{
static Calc calc = new Calc();

static void Main(string[] args)
{
try
{
var t1 = new Thread(calc.Divide);
t1.Start();
}
catch (DivideByZeroException e)
{
//Console.WriteLine("Error thread: " + e.Message);
}

try
{
calc.Divide();
}
catch (Exception e)
{
//Console.WriteLine("Error calc: " + e.Message);
}

}

class Calc
{
public int Num1;
public int Num2;

Random random = new Random();

public void Divide()
{
for (int i = 0; i < 100000; i++)
{
Num1 = random.Next(1, 10);
Num2 = random.Next(1, 10);

try
{
int result = Num1 / Num2;
}
catch (Exception ex)
{
throw ex;
}

Num1 = 0;
Num2 = 0;
}
}
}
}

两个线程同时执行同一个方法。其中一个将 Num1 设置为 0,而另一个试图同时除以 Num1 (0)。问题是为什么抛出异常,为什么没有被Main方法中的try catch block 捕获?

enter image description here

最佳答案

主线程是一个线程,你的新线程是另一个线程。这两个线程不会互相交谈,这意味着它们是完全独立的。如果你想在你的主线程上捕获异常,有两种方法可以做到这一点

  1. 使用 backgroundworker 类,RunWorkerCompleted 事件将在主线程上触发,e.exception 会告诉您是否有异常导致线程中止。

  2. 使用全局捕手

在你的代码之前添加这一行

Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;

void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
//handle the exception
}

关于c# - 多线程异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com