考虑一个简单的场景:我有3种形式。 Form1有一个显示Form2的按钮; Form2依次具有一个打开Form3的按钮。
最初的目标:
我(认为?)是这样实现的(Task.Delay
模拟了一些数据加载):
Form1
public partial class Form1 : Form
{
private Form2 form2 = new Form2();
public Form1()
{
InitializeComponent();
}
public async Task Init()
{
await Task.Delay(5000);
MessageBox.Show("Form1 data load finished");
}
private async void Form1_Load(object sender, EventArgs e)
{
await Task.WhenAll(form2.Init(), Init());
MessageBox.Show("Form2 prepared, form1 finished loading");
}
private void Button1_Click(object sender, EventArgs e)
{
form2.Show();
}
}
Form2
public partial class Form2 : Form
{
private Form3 form3 = new Form3();
public Form2()
{
InitializeComponent();
}
public async Task Init()
{
await Task.Delay(5000);
MessageBox.Show("Form2 data load finished");
}
private void Button1_Click(object sender, System.EventArgs e)
{
form3.Show();
}
private async void Form2_Load(object sender, System.EventArgs e)
{
await form3.Init();
MessageBox.Show("Form3 prepared");
}
}
Form3
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
public async Task Init()
{
await Task.Delay(5000);
MessageBox.Show("Form3 data load finished");
}
}
问题:
我想在所示的Form3上取消由Form1完成的任何数据加载,处置该数据并关闭它。我看到了CancellationToken
,但不确定如何在这里使用它。