Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Process.WaitForExit()导致NullReferenceException_.net_Vb.net_System.diagnostics - Fatal编程技术网

.net Process.WaitForExit()导致NullReferenceException

.net Process.WaitForExit()导致NullReferenceException,.net,vb.net,system.diagnostics,.net,Vb.net,System.diagnostics,以下代码导致NullReferenceException tStartParameter = String.Format(tStartParameter, tTo, tSubject) tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _ With {.UseShellExecute = True}) tProcess.WaitForExit() tstarts参数为: https://mail.

以下代码导致NullReferenceException

tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _
           With {.UseShellExecute = True})
tProcess.WaitForExit()
tstarts参数为:

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:没有进程与此对象关联


从MSDN,Process.Start将返回:

一个新的流程组件 与流程资源关联, 或空引用 (Visual Basic中没有),如果没有 流程资源已启动(对于 例如,如果现有流程是 重复使用)

在您的情况下,因为您将URL传递给Process.Start而不是可执行文件,所以实际上并不是启动一个新进程。您正在将URL传递给iexplore,或者其他浏览器。所以你得到了一个空值

在任何情况下,“在用户完成启动的进程之前阻止程序执行”意味着什么?是否等待用户关闭web浏览器?在这种情况下,您可能需要以下内容:

Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();

。。。这对我来说很合适。但它确实需要您指定浏览器可执行文件。

从MSDN,Process.Start将返回:

一个新的流程组件 与流程资源关联, 或空引用 (Visual Basic中没有),如果没有 流程资源已启动(对于 例如,如果现有流程是 重复使用)

在您的情况下,因为您将URL传递给Process.Start而不是可执行文件,所以实际上并不是启动一个新进程。您正在将URL传递给iexplore,或者其他浏览器。所以你得到了一个空值

在任何情况下,“在用户完成启动的进程之前阻止程序执行”意味着什么?是否等待用户关闭web浏览器?在这种情况下,您可能需要以下内容:

Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();

。。。这对我来说很合适。但是,它确实需要您指定浏览器可执行文件。

您的进程不需要执行类似“iexplore”的操作吗?您的进程不需要执行类似“iexplore”的操作吗?我希望避免直接调用iexplore.exe。。但看来我别无选择。完美答案。谢谢。我希望避免直接打电话给iexplore.exe。。但看来我别无选择。完美答案。谢谢