1

これはコードです:

private void processNotePad_Exited(object sender, EventArgs e)
        {
            this.Invoke((MethodInvoker)delegate
            {
                View_Log_File.Enabled = true;
            });
        }

Form1にメニューがあり、そこをクリックすると新しいフォームが開きます。ボタンをクリックすると、notepad.exeを使用してログファイル(txtファイル)が開きます。最初にメモ帳を閉じてからメニューフォームを閉じると、すべて問題ありません。しかし、最初にメニューフォームを閉じて、メモ帳を閉じようとすると、例外が発生します:

例外エラー: ウィンドウ ハンドルが作成されるまで、Invoke または BeginInvoke をコントロールで呼び出すことはできません

System.InvalidOperationException was unhandled
  HResult=-2146233079
  Message=Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
  Source=System.Windows.Forms
  StackTrace:
       at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
       at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
       at System.Windows.Forms.Control.Invoke(Delegate method)
       at mws.SettingsMenu.processNotePad_Exited(Object sender, EventArgs e) in D:\C-Sharp\Download File\Downloading-File-Project-Version-012\Downloading File\SettingsMenu.cs:line 148
       at System.Diagnostics.Process.OnExited()
       at System.Diagnostics.Process.RaiseOnExited()
       at System.Diagnostics.Process.CompletionCallback(Object context, Boolean wasSignaled)
       at System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context(Object state, Boolean timedOut)
       at System.Threading._ThreadPoolWaitOrTimerCallback.WaitOrTimerCallback_Context_f(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading._ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(Object state, Boolean timedOut)
  InnerException: 

この場合、どのように対処すればよいですか?ユーザーが最初にメニュー フォームを閉じてからメモ帳を閉じると、この例外がスローされます。

4

1 に答える 1

1

メモ帳ウィンドウの前にメニューフォームを閉じるとエラーが発生するため、メニューフォームを閉じる前にメニューフォームFormClosingEventHandlerを使用してメモ帳ウィンドウを閉じることをお勧めします。

上記のリンクから:

FormClosingイベントは、フォームが閉じられているときに発生します。フォームが閉じられると、フォームは破棄され、フォームに関連付けられているすべてのリソースが解放されます。このイベントをキャンセルすると、フォームは開いたままになります。フォームの終了をキャンセルするには、イベントハンドラーに渡されるFormClosingEventArgsのCancelプロパティをtrueに設定します。

于 2013-01-04T04:27:28.640 に答える