2010-12-01 23 views
1

私はOnPropertyChangedを呼び出して(SourceUpdatedTrigger = PropertyChangedを使用して)バインディングソースにプッシュする各キーストロークでユーザーがWPF TextBoxに入力できるようにしたいという状況があります。データを処理しようとするまでに少し時間がかかります(たとえば... 1秒)。これはスペルチェックシステムのように考えてください。スペルチェックシステムのように、ユーザーが入力をやめてからスペルできないことを知らせます。キャンセルの遅延実行タスクの実装

私の問題がある:あなたが実際にキャンセルするまで

await TaskEx.Delay(1000, cts.Token); 
await TaskEx.RunEx(PollAsync, cts.Token); 

が正常に動作しますが、その後のキャンセルトークンソースは「キャンセル要求された」状態で永続的にある、と私はCTSをreinstanciateしなければならない...これはと思われます...根本的に間違っています... CTSを「リセット」するより良い方法はありますか?それでも、既存のトークンには取り消すべきことを通知しますか?

答えて

2

いいえ、CancellationTokenSourceは、一度キャンセルすることができます。あなたが言うように、キャンセルした後で新しいものを作成し、その後の作業を行う必要があります。

+0

このような遅延開始処理には「ベストプラクティス」がありますか? – Firoso

+0

@フィロソ:それは私が気づいていない。私は、タスクを取り消すことが最善のアプローチだとは確信していません。おそらく、別のキーストロークがあった場合に発生したときに処理することを気にしないでください。わからない。 –

+0

@JonSkeetこんにちは。あなたは[この質問](http://stackoverflow.com/questions/17082827/error-the-operation-was-canceled)を見てみませんか?前もって感謝します –

関連する問題