我有一个显示进度条的Windows窗体(AlertForm)。我正在尝试通过一项任务来证明它的成功。我遇到的问题是当我生成线程并调用winforms.showdialog()时,它持有线程,因此无法取消它。我这样做是因为我正在通过C#编写一个excel add,其中没有面板显示进度条。
static void Main(string[] args)
{
AlertForm alert = new AlertForm();
var ts = new CancellationTokenSource();
CancellationToken ct = ts.Token;
Task.Factory.StartNew(() =>
{
//while (true)
//{
// do some heavy work here
alert.ShowDialog();
Thread.Sleep(100);
if (ct.IsCancellationRequested)
{
alert.Close();
// another thread decided to cancel
Console.WriteLine("task canceled");
//break;
}
//}
}, ct);
// Simulate waiting 3s for the task to complete
Thread.Sleep(3000);
// Can't wait anymore => cancel this task
ts.Cancel();
Console.ReadLine();
}
我如何打开表格而不保留它,所以在以后较长的任务完成时,我可以取消将关闭窗口的任务 (AlertForm)?
答案 0 :(得分:-2)
如果AlertForm类是从Windows.Forms.Control继承的,则可以使用Invoke方法
alert.Invoke((MethodInvoker)delegate ()
{
alert.Close();
});