System.InvalidOperationException
HResult=0x80131509
Message=有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'textBox1' がアクセスされました。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
namespace ExecApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate void ExitEventHandler();
public event ExitEventHandler evt;
private void button4_Click(object sender, EventArgs e)
{
evt += proc_Exited_message;
Process proc = new Process();
proc.StartInfo.FileName="notepad.exe";
proc.StartInfo.Arguments = @"C:\Windows\system.ini";
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);
proc.Start();
}
void proc_Exited(object sender, EventArgs e)
{
this.Invoke(evt);
}
void proc_Exited_message()
{
textBox1.Text += "notepad.exeが終了しました\r\n";
}
}
}
public delegate void ExitEventHandler();
public event ExitEventHandler evt;
evt += proc_Exited_message;
Process proc = new Process();
proc.StartInfo.FileName="notepad.exe";
EnableRaisingEvents
プロパティを true に設定しイベントが発生する状態にします。
Exitedイベントに proc_Exited メソッドの呼び出しを追加します。アプリケーションが終了すると、proc_Exited() メソッドが呼び出されます。 proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);
void proc_Exited(object sender, EventArgs e)
{
this.Invoke(evt);
}
public void proc_Exited_message()
{
textBox1.Text += "notepad.exeが終了しました\r\n";
}
private void button5_Click(object sender, EventArgs e)
{
Process proc = new Process();
proc.StartInfo.FileName = "notepad.exe";
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited2);
proc.Start();
}
void proc_Exited2(object sender, EventArgs e)
{
//方法1
ExitEventHandler eeh = proc_Exited_message;
this.Invoke(eeh);
}
void proc_Exited2(object sender, EventArgs e)
{
//方法2
this.Invoke(new ExitEventHandler(proc_Exited_message) );
}
void proc_Exited2(object sender, EventArgs e)
{
//方法3
this.Invoke(new Action(proc_Exited_message) );
}