ソースコード覚書
以下は、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。しないと落ちる。
キャンセルはループ処理内とかで使うと有効。
トークンのスコープに注意。