在另一个线程上或在关闭申请之前清除Mutex?

时间:2018-06-08 09:13:39

标签: c# winforms mutex

由于Mutex是基于线程的(根据文档),我不能在另一个异步执行的函数上释放我的Mutex。

流速:

  • 启动应用程序,在程序中存储Mutex变量。
  • 程序主要()开始时:检查Mutex是否空闲,如果是,请继续
  • 在另一个线程,表单,外部调用,e.t.c中调用Class1-> Login()

Class1 =>登录()

  1. 检查登录
  2. 保存状态
  3. Application.Restart()
  4. 重启后,Mutex仍将被锁定,因为Application.Restart()的internalClose尚未完成
  5. 在2到3之间,我无法调用例如:Program.mutexVar.releaseMutex(),因为它具有线程关联性。

    到目前为止我唯一的解决方法(确实有效)是:

    1. Environment.SetEnvironmentVariable(“AppRestart”,“1”);
    2. Application.Restart();
    3. Main():Environment.GetEnvironmentVariable(“AppRestart”)==“1”,task.delay在while循环中直到它是免费的
    4. Mutex终于免费了,我们可以在循环中离开并继续。
    5. 但是由于其需要不断查询Mutex并且不得不进行循环和延迟的性质,它不是一个很好的解决方案。

0 个答案:

没有答案