如何在 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!
    }

如何在 c# 中取消操作

我认为取消按钮甚至没有被处理,因为由于不正确使用await/async,消息循环卡在开始按钮的处理程序中。我相信改变

send.Invoke(source.token) 

send.BeginInvoke(source.token, null)

应该给你想要的结果。

请注意,我实际上还没有编译您的代码。