我应该什么时候处理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,在这种情况下,我希望一开始就不会出现错误)。
if (CTSSend != null)
{
CTSSend.Cancel();
CTSSend.Dispose();
}
if (CTSReceive != null)
{
CTSReceive.Cancel();
CTSReceive.Dispose();
}
好的,也许最后我应该只在最后处理它,并且不要在每次取消后处理它? 尽管我不喜欢这样会向新对象添加资源。
你们在这些情况下该怎么做?
编辑:
一个更具体的问题将解决它(在我的情况下)。
如何将布尔值绑定到CancellationToken上? 这样我就可以像CTS.IsDisposed这样拥有一些东西;
一些对象有这个功能,但CTS没有,如果有这个功能,就可以解决我的问题。 我目前正在单独使用一个布尔值,这不是我喜欢的事情。