У меня есть tabControl, в котором я добавляю tabPages каждый раз, когда нажимаю кнопку поиска. Объект tabControl также имеет обработчик событий для MouseDown, чтобы закрыть вкладку, когда мышь висит на определенной вкладке и нажимает на нее. Метод tabcontrol_MouseDown также отменяет задачу, которая запускается при нажатии кнопки поиска, чтобы задача не пыталась обновить с помощью tabPage, который был удален из tabControl с его resultData.Как получить ссылку на локальную переменную, определенную в методе, изнутри метода обработчика событий? (при отсутствии лучшего заголовка)
Проблема с приведенным ниже кодом состоит в том, что cts
является переменной объекта, поэтому она перезаписывается каждый раз, когда я создаю новую вкладку с новым элементом CancellationTokenSource. Это может сработать, если мне нужно только добавить одну вкладку в tabControl, но мне нужно добавить много.
Есть ли способ, которым я мог бы определить и создать токен отмены в методе 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();
}
}
Извините, это была только опечатка, отредактировав вопрос. Речь идет о другом. –
Не можете ли вы просто вывести из 'TabPage', сделать' cts' полем и 'SlowMethod' методом экземпляра? Тогда каждый экземпляр вкладки может иметь свой собственный «CancellationTokenSource». –
@ KirillShlenskiy Я разработал tabPage в дизайнере, потому что мне нужно было иметь конкретное расположение элементов управления внутри него. –