0

次のコードは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:このオブジェクトに関連付けられているプロセスはありません。

4

1 に答える 1

4

MSDNから、Process.Startは次を返します。

プロセスリソースが開始されていない場合(たとえば、既存のプロセスが再利用されている場合)、プロセスリソースに関連付けられている新しいプロセスコンポーネント、 またはnull参照(Visual BasicではNothing )。

あなたの場合、実行可能ファイルではなくProcess.StartにURLを渡しているので、実際には新しいプロセスを開始しているわけではありません。あなたはiexplore、またはあなたのブラウザが何であれ、URLを渡しています。そして、あなたはヌルを取り戻します。

いずれにせよ、「ユーザーが起動されたプロセスを完了するまでプログラムの実行をブロックする」とはどういう意味ですか?ユーザーがWebブラウザを閉じるまで待ちますか?その場合、次のようなものが必要になる場合があります。

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

...これは私にとって適切に機能します。ただし、ブラウザの実行可能ファイルを指定する必要があります。

于 2009-05-18T22:48:21.530 に答える