首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Process.WaitForExit()导致NullReferenceException

Process.WaitForExit()导致NullReferenceException
EN

Stack Overflow用户
提问于 2009-05-18 22:31:44
回答 1查看 3.7K关注 0票数 0

下面的代码会导致NullReferenceException

代码语言:javascript
复制
tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _
           With {.UseShellExecute = True})
tProcess.WaitForExit()

tStartParameter是:

代码语言:javascript
复制
https://mail.google.com/?view=cm&fs=1&tf=1&to=t@example.com&su=boogaloo!!

使用调试器,我看到Process.Start正在返回null。所以..。对为什么会发生这种事有什么想法吗?我真的很想阻止程序的执行,直到用户完成启动的过程。

更新:将代码重构为:

代码语言:javascript
复制
tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = New Process
tProcess.StartInfo = New ProcessStartInfo(tStartParameter) _
                     With {.UseShellExecute = True}
tProcess.Start()
tProcess.WaitForExit()

导致此异常:

InvalidOperationException:没有进程与此对象关联.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-18 22:48:21

从MSDN中,Process.Start将返回:

--一个新的流程组件,它与进程资源、或null引用相关联( Visual中为Nothing),如果没有启动进程资源,则为(例如,如果重用了现有进程)。

在您的例子中,由于您将一个URL传递给Process.Start而不是一个可执行文件,所以您实际上并没有开始一个新的进程。您正在将URL传递给探索者,或任何浏览器。所以你会得到一个空值。

在任何情况下,“阻止程序执行直到用户完成启动的进程”意味着什么?等待直到用户关闭网页浏览器?在这种情况下,您可能需要这样的东西:

代码语言:javascript
复制
Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();

..。对我来说是合适的。不过,它确实要求您指定浏览器可执行文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/880129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档