如何在 c# 中取消操作
本文关键字:取消 操作 | 更新日期: 2023-09-27 18:04:51
注意:如果您单击buttonStart
然后单击buttonCancelSending
,它不会引发buttonCancelSending_Click
的事件,这将发送取消信号...无论如何,我可以通过单击按钮取消发送来取消吗?!
private void buttonStart_Click(object sender, EventArgs e)
{
Action<CancellationToken> send = async (token) =>
{
await Task.Run(() => Thread.Sleep(1500));
int sendCount = 10;
foreach (ListViewItem item in listViewReleases.Items)
{
if (token.IsCancellationRequested)
break;
if (this.Focused)
return;
if (sendCount > 0)
{
if (item.Checked == false)
continue;
SendKeys.SendWait("^a");
SendKeys.SendWait(Utilities.FixSenderTags(item.SubItems[1].Text));
SendKeys.SendWait("{TAB}");
if (token.IsCancellationRequested)
return;
}
else
{
// don't send more then 10 releases
break;
}
sendCount--;
}
SendReleaseTypes();
};
send.Invoke(source.Token);
}
private void buttonCancelSending_Click(object sender, EventArgs e)
{
source.Cancel(); // send the signal for cancellation!
}
我认为取消按钮甚至没有被处理,因为由于不正确使用await/async,消息循环卡在开始按钮的处理程序中。我相信改变
send.Invoke(source.token)
自
send.BeginInvoke(source.token, null)
应该给你想要的结果。
请注意,我实际上还没有编译您的代码。