Control.Invoke在C#中的第二个线程中抛出NullReferenceException

时间:2016-11-22 01:15:24

标签: c#

以下是我正在做的简化版本:

delegate void ValueDelegate(object sender, EventArgs e);
private void ExecFinished(object sender, EventArgs e)
{
      if (InvokeRequired)
      {
            var pp = new ValueDelegate(ExecFinished);
            this.Invoke(pp, sender, e);
      }
      else
      {
            //do something
      }
}

抛出的异常是this.Invoke(pp, sender, e);

中的NullReferenceException

此代码在第二个线程上运行,当我尝试访问表单控件时,它会出现以下错误: 跨线程操作无效:控制'control_name'从其创建的线程以外的线程访问。

调试过程中

变量为空。

异常详情:

System.NullReferenceException was unhandled
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=System.Windows.Forms
  StackTrace:
       at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
       at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
       at SpectrometryAnalysis.TraditionalDataForm.ExecFinished(Object sender, EventArgs e) in D:\...\TraditionalDataForm.cs:line 393
       at SpectrometryAnalysis.Model.JavaMachineLearningCaller.<>c__DisplayClass1_0.<Redirect>b__0(Object a) in D:\...\Model\JavaMachineLearningCaller.cs:line 84
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart(Object obj)
  InnerException:

有什么想法吗? 谢谢! :)

0 个答案:

没有答案