先日、ふと目にしたのですが、
デリゲートを非同期で実行できる
らしい・・・
やり方を調べたので、忘れないうちに試してメモっておきます。
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
this.Method(
() => {
foreach(var x in Enumerable.Range(0, 10000)) Console.WriteLine(x); });
}
private void Method(Action action) {
action.BeginInvoke(x => action.EndInvoke(x), null); // 非同期処理
// action(); // 同期処理
}
}
ボタンを押すと別のスレッドで 10000回ループしながら、値を出力し続けます。
スレッドが別なので、フォームの操作に支障はありませんね。
試しに action(); で実行してみると、同一スレッドで実行されるためフォームが固まります。
覚えておくと便利そうな方法ですね。