由于Mutex是基于线程的(根据文档),我不能在另一个异步执行的函数上释放我的Mutex。
流速:
- 启动应用程序,在程序中存储Mutex变量。
- 程序主要()开始时:检查Mutex是否空闲,如果是,请继续
- 在另一个线程,表单,外部调用,e.t.c中调用Class1-> Login()
Class1 =>登录()
- 检查登录
- 保存状态
- Application.Restart()
- 重启后,Mutex仍将被锁定,因为Application.Restart()的internalClose尚未完成
醇>
在2到3之间,我无法调用例如:Program.mutexVar.releaseMutex(),因为它具有线程关联性。
到目前为止我唯一的解决方法(确实有效)是:
- Environment.SetEnvironmentVariable(“AppRestart”,“1”);
- Application.Restart();
- Main():Environment.GetEnvironmentVariable(“AppRestart”)==“1”,task.delay在while循环中直到它是免费的
- Mutex终于免费了,我们可以在循环中离开并继续。
醇>
但是由于其需要不断查询Mutex并且不得不进行循环和延迟的性质,它不是一个很好的解决方案。