C# 线程在捕获异常C时结束#
所以我有一大堆电话。在堆栈的末尾抛出ArgumentException。它从一个点传播到最后一个点,我有这个代码:C# 线程在捕获异常C时结束#,c#,exception,exception-handling,argumentexception,C#,Exception,Exception Handling,Argumentexception,所以我有一大堆电话。在堆栈的末尾抛出ArgumentException。它从一个点传播到最后一个点,我有这个代码: ... Constructor(..){ try { this.Issuer = issuer; this.Name = name; this.Secret = secret; this.totpObj = new Totp(secret, 30,
... Constructor(..){
try
{
this.Issuer = issuer;
this.Name = name;
this.Secret = secret;
this.totpObj = new Totp(secret, 30, 6, mode);
this.id = Guid.NewGuid().ToString();
this.mode = mode;
this.valid = true;
}
catch (System.ArgumentException e)
{
throw e; // Also tried not having this --> option B
}
catch (Exception e)
{
}
}
从这里调用此代码:
private void addButtnClick(object sender, RoutedEventArgs e)
{
try
{
...
TOTPObj totpo = new TOTPObj(af.Accname, af.Issuer, secret, stype); // <--- FAILS
...
}
catch(Exception ex) // <--- SHOULD CATCH THIS?!
{
Console.WriteLine(ex);
Environment.Exit(ERROR_FAILED_ADD_KEY);
}
}
private void addbuttclick(对象发送方,路由目标)
{
尝试
{
...
TOTPObj totpo=新的TOTPObj(af.Accname,af.Issuer,secret,stype);//只需使用throw
而不是throw e
,以避免损坏调用堆栈,这并不是说这会解决问题。构造函数不应该抛出异常。而是创建一个工厂方法。创建工厂将如何改变这一点?我只是创建一个空的类实例,然后使用s填充参数然后将异常抛出到那里?问题本身与在我的构造函数中抛出无关?或者可以?为什么你永远不应该这样做?如果我在构造函数中捕捉到异常(并且不抛出它),为什么UI线程结束?对于您向我们展示的代码,这是不可能的。唯一可能导致问题的异常可能是堆栈溢出。我假设捕获为空(异常)在构造函数中
不是真的为空,你确定其中一个不是因为某种原因触发的吗?是的,我在问题开始发生后添加了它,以防万一。从图像中也可以看出,是另一个“特定”异常触发的,在“抛出”行上