"对象引用未设置为实例"使用委托时

时间:2014-03-26 11:14:24

标签: c# multithreading exception-handling

您好我在.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);
}

2 个答案:

答案 0 :(得分:1)

  

为什么没有被try catch子句捕获?

因为它发生在具有不同堆栈的不同线程中,而不是try / catch块

  

尽管MainForm.NumberOFWindows已初始化,为什么会发生异常?

只是一个猜测,也许是因为你检查它是在主线程中初始化然后在新线程控制并尝试访问它之前以某种方式销毁它(线程创建需要一些时间)

答案 1 :(得分:0)

  

为什么没有被try catch子句捕获?

如果你想要这个,你必须把try catch块放到代理中,就像这样

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