我有一个 tabControl,每次单击搜索按钮时都会在其中添加 tabPages。tabControl 对象还有一个 MouseDown 事件处理程序,以便在鼠标悬停在特定选项卡上并单击它时关闭选项卡。tabcontrol_MouseDown 方法还取消了在单击搜索按钮时启动的任务,因此该任务不会尝试使用已从 tabControl 中删除的 tabPage 及其 resultData 进行更新。
下面代码的问题在于它cts
是一个对象变量,因此每次我使用新的 CancellationTokenSource 创建一个新选项卡时它都会被覆盖。如果我只需要向 tabControl 添加一个 tabPage,这可能会起作用,但我需要添加很多。
有没有一种方法可以在 searchButton_Click 方法中定义和创建一个取消令牌,并让 tabControl_MouseDown 找到对它的引用,或者有其他方法可以解决这个问题吗?
public class Form1 : Form {
CancellationTokenSource cts;
private async void searchButton_Click(object sender, EventArgs e){
cts = new CancellationTokenSource();
tabControl1.TabPages.Add(new TabPage());
var resultData = await Task.Run(() => SlowMethod());
if (!cts.Token.IsCancellationRequested) { /* add resultData to tabPage */ }
}
private void tabControl_MouseDown(object sender, MouseEventArgs e){
// - I select the tab being hovered with mouse
// - I remove the tab from tabControl
cts.Cancel();
}
}