動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About
C#

定石2: Task.Run + Control.Invokeでモダンに書く

出典: WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け定石2: Task.Run + Control.Invokeでモダンに書く

定石2: Task.Run + Control.Invokeでモダンに書く (csharp)#e29c62a2a0b1
// ✅定石2: Task.Run + Control.Invoke
using System.Threading.Tasks;
 
public partial class ImportForm : Form
{
    private void btnStart_Click(object sender, EventArgs e)
    {
        Task.Run(()=> DoHeavyWork());
    }
 
    private void DoHeavyWork()
    {
        //バックグラウンドスレッドで動く(UI触れない)
        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(50);
 
            // UI更新はControl.Invokeでマーシャリング
            int percent = i + 1;
            this.BeginInvoke(new Action(()=>
            {
                progressBar1.Value = percent;
            }));
        }
 
        //完了通知も同様
        this.BeginInvoke(new Action(()=>
        {
            lblStatus.Text = "完了";
        }));
    }
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
  • id: #e29c62a2a0b1
  • lines: 32
  • extracted: 2026-06-10

Source収録記事

この snippet は記事の「定石2: Task.Run + Control.Invokeでモダンに書く」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。

同じ記事から

5
図鑑トップ