Я нашел проблему. Я обнаружил, что асинхронные процессы в дочернем элементе управления сбились с пути даже после удаления родительского элемента управления (в данном случае это TabPage).
Простой пример того, как я решил, приведен ниже.
Кроме того, для более сложной цепочки задач я могу ввести толкования отмены, когда родительский элемент станет нулевым, и, таким образом, очистить все, что нужно, когда пользователь закрывает вкладку с этим элементом управления, но не закрывает приложение в целом.
используя this.Parent и проверяя, является ли оно нулевым или нет, если бы ему нравилось.
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
if(this.Parent == null)
{
// Clean up
}
}
и \ или это
private async Task popUp()
{
do
{
MessageBox.Show("Im running!");
await Task.Delay(5000);
}
while (this.Parent != null);
}