我有一个函数(Shutdown()),它用于终止我的窗体(做一些清理并在最后调用this.close())。
在我的应用程序中,我有执行线程
这些中的每一个都可以通过用户按下按钮(UI),计时器到期(计时器)或后台工作人员完成他的任务来调用Shutdown()。这让我担心如果时间非常糟糕,我可以让多个线程同时调用Shutdown()。
那么我怎样才能确保只有第一个调用它的人才会执行它?任何后续调用都应该被忽略,因为无论如何调用将以终止应用程序结束。
答案 0 :(得分:1)
从你的问题中我不清楚困难是什么。你有什么尝试?你遇到了什么麻烦?
明显的,微不足道的实现将是这样的:
private readonly object _lock = new object();
private bool _shuttingDown;
public void Shutdown()
{
lock (_lock)
{
if (_shuttingDown) return;
_shuttingDown = true;
}
// do work here...
}
是否有某些原因在您的方案中无效?如果是这样,请提供a good, minimal, complete code example,清楚地显示您尝试过的内容,准确描述代码的作用以及与您希望的内容有何不同。