以下代码导致NullReferenceException
tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _
With {.UseShellExecute = True})
tProcess.WaitForExit()
tStartParameter是:
https://mail.google.com/?view=cm&fs=1&tf=1&to=t@example.com&su=boogaloo!!
使用调试器我看到Process.Start返回null。那么..有关为什么会这样的想法?我真的想阻止程序执行,直到用户完成启动过程。
更新: 将代码重构为:
tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = New Process
tProcess.StartInfo = New ProcessStartInfo(tStartParameter) _
With {.UseShellExecute = True}
tProcess.Start()
tProcess.WaitForExit()
导致此异常:
InvalidOperationException:没有进程与此对象关联。
答案 0 :(得分:4)
从MSDN,Process.Start将返回:
一个新的Process组件 与流程资源相关联, 或null引用 (在Visual Basic中没有任何内容),如果没有 流程资源已启动(for 例如,如果现有流程是 重复使用)。
在您的情况下,由于您将URL传递给Process.Start而不是可执行文件,因此您实际上并未启动新进程。您将URL传递给iexplore,或者您的浏览器。所以你得到一个空的回来。
在任何情况下,“阻止程序执行直到用户完成启动的进程”意味着什么?等到用户关闭Web浏览器?在这种情况下,您可能需要以下内容:
Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();
......适合我。但它确实要求您指定浏览器可执行文件。