PG.Lib

アプリ開発関連とかガジェット関連とか

Task テンプレ

ソースコード覚書

以下は、Taskで非同期動作させるためのテンプレ。

[csharp] // キャンセル用のソース // キャンセル操作からもアクセスできるスコープで。 CancellationTokenSource cancelSource = new CancellationTokenSource();

// // 処理 // private void hoge() { // キャンセルトークン var token = cancelSource.Token;

// メインなタスク
var tsk = Task.Factory.StartNew(() =>
    {
        for(int i = 0; i < 5; i++)
        {
            // 処理を書く
            hogehoge();

            // キャンセル通知を受けた場合
            if (token.IsCancellationRequested)
            {
                // キャンセル時処理

            }
        }
    }, token);

// 完了時のタスク
var cont = tsk.ContinueWith((t) =>
    {
        // 処理を書く
        hogehogeComplete();

        Invoke((Action)delegate()
        {
            // UI処理を書く

        });
    });

}

// // キャンセル処理 // private void hogeCancel() { // キャンセルを通知 cancelSource.Cancel(); } [/csharp]

UI処理はInvoke。しないと落ちる。

キャンセルはループ処理内とかで使うと有効。

トークンのスコープに注意。