如何检查单击事件是否已在 C# Winforms 中

How to check if a click event is already in process C# Winforms

我有这样的方法:

private async void BtnGivePermit_Click(object sender, EventArgs e)
{
    //some code here
}

我正在尝试向“取消”添加一个按钮,我想在其中检查是否有任何其他点击事件未在进行中。我如何在 C# 中做到这一点?

正如 Ash 所建议的那样,您可能想要一个像这样的布尔值:

bool isGivePermitProcessing = false;
private void BtnGivePermit_Click(object sender, EventArgs e)
{
    isGivePermitProcessing = true;
    try {
        ...
    } finally {
        isGivePermitProcessing = false;
    }
}

这样可以让您明确了解函数当前是否正在处理中。

try-finally 块确保没有异常会导致 isGivePermitProcessing 布尔值无限期地变为真。


将上述概念扩展到 Jimi 的建议中,您也可以像这样简单地禁用按钮:

private void BtnGivePermit_Click(object sender, EventArgs e)
{
    BtnGivePermit.Enabled = false;
    try {
        ...
    } finally {
        BtnGivePermit.Enabled = true;
    }
}

这也会让您明确了解该功能当前是否正在处理,同时还可以防止在已经处理上一次点击的同时点击按钮。


如果您打算为异步操作制作一个取消按钮,您可能需要查看 CancellationToken 类型。