C# 线程在捕获异常C时结束#

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,

所以我有一大堆电话。在堆栈的末尾抛出ArgumentException。它从一个点传播到最后一个点,我有这个代码:

    ... 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线程结束?对于您向我们展示的代码,这是不可能的。唯一可能导致问题的异常可能是堆栈溢出。我假设捕获为空(异常)在
构造函数中
不是真的为空,你确定其中一个不是因为某种原因触发的吗?是的,我在问题开始发生后添加了它,以防万一。从图像中也可以看出,是另一个“特定”异常触发的,在“抛出”行上