繁体   English   中英

ManualResetEvent.WaitOne()抛出NullReferenceException:对象引用未设置为对象的实例

[英]ManualResetEvent.WaitOne() throws NullReferenceException: Object reference not set to an instance of an object

处理ManualResetEvent.WaitOne()时,我有一个奇怪的随机NPE错误。 这是我的代码。

我有一个创建ManualResetEvent对象的方法,然后将其作为依赖参数(manualResetEvent)之一传递给Windows Workflow Foundation(WWF)工作流实例,然后我进入manualResetEvent.WaitOne()API。

ManualResetEvent manResetEvt = new ManualResetEvent(false);

Dictionary<String, Object> wfArgs = new Dictionary<string, object>();
wfArgs["manualResetEvent"] = manResetEvt;

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(MyWWFProcess), wfArgs);

instance.Start();
manResetEvt.WaitOne();

当作业在WWF中完成时,我只需调用manualResetEvent.set()。

if (this.manualResetEvent != null)
{
    this.manualResetEvent.Set();
}

所有这些编译好并且在运行时,我看到流程按预期进入WWF,并且调用者也在等待WaitOne()调用。

WWF调用manualResetEvent.Set()来通知调用者的那一刻,我看到调用者不是WWF的NPE异常。

System.NullReferenceException:未将对象引用设置为对象的实例。

我真的不知道这个例外的起源。 当我在VS IDE中调试此代码时,一切正常,但只有当应用程序处于发布模式时,才会看到此异常。

我在这做错了什么?

我找到了问题的答案。 基于James Thorpe的建议,我从异常中打印了堆栈跟踪,结果发现应用程序在调用此方法时发送了一个NULL数据点,并且WaitOne()没有导致NPE。 当我从VS IDE调试器运行单元测试时,我传递了一个很好的值,因此没有发现异常。 修复调用方法后,一切正常。 感谢所有提出想法解决此问题的人。

您需要将对象添加到字典中

Dictionary<String, Object> wfArgs = new Dictionary<string, object>();
wfArgs.Add("manualResetEvent", manResetEvt);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM