2014-03-26 54 views
1

您好,我在.net 4.0中遇到了一个奇怪的问题。我从我的主窗体线程中调用以下代码,并且我在变量MainForm.NumberOFWindows(虽然它已初始化)上得到“未设置为实例的对象引用”异常,但我找不到原因。对我来说真奇怪的是,这个异常没有被try catch异常子句捕捉到。 有人可以请我的问题一些灯?为什么会发生异常,以及为什么它没有被try catch子句捕获?使用委托时“对象引用未设置为实例”

try 
{ 
    MyThread = new Thread(delegate() 
    { 
     Notify.UserInput(this,ref MainForm.NumberOFWindows); 
    }); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.Message); 
} 
+0

@MaxMommersteeg那是什么来实现呢? “MyThread”可能是一个属性。 –

+0

try/catch不会捕获它,因为它没有在该点运行。运行MyThread的代码在哪里? –

+0

要捕捉错误,您需要在代理内部放置一个try catch – Johan

回答

1

为什么它没有被在try catch子句逮住?

因为它在不同的线程中发生的与不同的堆栈比你的try/catch块

为什么会出现异常,尽管MainForm.NumberOFWindows初始化?

只是猜测,也许是因为你选择了它在主线程初始化,然后摧毁它新的线程需要控制和试图访问它(线程创建需要一些时间)

+0

线程中的异常处理:http://stackoverflow.com/questions/1554181/exception-handling-in-threads – JustAndrei

+0

所以如果我正确理解你,我从委托获得的异常实际上是在另一个线程上发生的,尽管我还没有调用MyThread.Start()函数,是的? – mpc

+0

当你调用MyThread.Start()' –

0

为什么它在某种程度上前是否被try catch子句捕获?

如果你想要这个,你必须把try catch块到代表这样

MyThread = new Thread(delegate() 
    { 
     try 
      { 
      Notify.UserInput(this,ref MainForm.NumberOFWindows); 
      } 
      catch (Exception ex) 
      { 
      MessageBox.Show(ex.Message); 
      } 
    }); 
相关问题