CancellationTokenSourceを破棄するのはいつですか? 私は、例えば1を作り、私はボタンをクリックするたびスレッドにそれを置く場合:CancellationTokenSource、いつ処分するのですか?
private void Button_Click(object sender, EventArgs e)
{
if (clicked == false)
{
clicked = true;
CTSSend = new CancellationTokenSource();
Thread1 = new Thread(() => Method1(CTSSend.Token));
Thread1.Start();
Thread2 = new Thread(() => Method2(CTSSend.Token));
Thread2.Start();
}
else
{
CTSSend.Cancel();
CTSSend.Dispose();
clicked = false;
}
}
私はそのようにそれを処分することになっているだろうか? もしそうなら、私は注意深くそれを待っていない場合は、すでに廃棄されていないことを保証していないので、アプリケーションが終了したときに処分するDisposerに入れる必要があるので、少し問題になります。それによってObjectDisposedExceptionが発生します。
私は例外を防ぐためにこれを試してみました(私はTry Catchを使用しないようにしていますが、この場合はエラーが最初に出ます)。
しかし、私は最後にそれを処分し、毎回取消し後に廃棄しないでください。 私はそれが新しいオブジェクトにリソースを追加し続ける方法が好きではありませんが。
あなたはどのようにこれらのケースで人々はしますか?
EDIT:
(私の場合)、それを解決するより具体的な質問。
どうすればBoolをCancellationTokenにバインドできますか? だから私はCTS.IsDisposedのようなものを持つことができます。
いくつかのオブジェクトがありますが、CTSはそれがあれば私の持つ問題を解決しません。 私は現在、boolを別々に使用しています。これは好きなものではありません。
これは「重複」しますが、実際には答えは得られません。ある人は、それを許しても大丈夫だと言い、他の人はあなたがそれを処分しなければならないと言います。そして、私は、既に処分されている場合は、あなたが閉じるときに、例外のチャンスを持たずに、それをどのように処分することができますか? – Zerowalker