在我的程序中,有一个带有“打印收据”按钮的屏幕;单击按钮时,我需要调用一个方法一次且仅一次。目前,用户可以打印多张收据,但我不知道有什么方法可以防止这种情况发生。
private async void PrintReceipt()
{
await _printReceiptInteractor.PrintTerminalReceiptAsync(_receipt).ConfigureAwait(false);
Dispatcher.Dispatch(() => { this.Close(); });
}
如何强制执行仅执行此方法一次的要求?
更新:我设法通过添加 IsBusy 属性和一个在那里设置 IsBusy 的方法来解决此问题,然后调用该方法,然后我在 finally 中将 IsBusy 设置为 false ,因为我使用try and catch 语句。
最佳答案
您需要禁用调用您的方法的 GUI 控件,或者您需要创建一个属性(例如 bool)来跟踪您的方法的条目。
private bool _executed = false;
private void Method()
{
if(!_executed)
{
_executed = true;
// ...
}
}
private readonly Button _button = new Button();
private void Method()
{
_button.Enabled = false;
// ...
}
private readonly object _lockObj = new object();
private void Method()
{
// Prevent concurrent access
lock(_lockObj)
{
if(!_executed)
{
_executed = true;
// ...
}
}
}
关于c# - 如何创建一个只执行一次的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38519433/