Mutex and Windows Phone 8.1 Silverlight
如果应用在前台打开,我想阻止后台进程执行操作。我在这里发现了类似的问题,但是我无法解决它。当我的后台进程检查互斥对象时,它从来就不存在。当前台应用启动时,我将创建一个互斥体,如下所示:
1 2 3 4 | public void Application_Launching(object sender, LaunchingEventArgs e) { var myMutex = new Mutex(false,"MUTEX_NAME"); } |
我在前台应用关闭时释放它:
1 2 3 4 5 | private void Application_Closing(object sender, ClosingEventArgs e) { var myMutex = new Mutex(false,"MUTEX_NAME"); myMutex.ReleaseMutex(); } |
在后台进程中,我进行了以下检查:
1 2 3 4 5 |
我在这里假设
您并未将互斥锁锁定在主应用程序中,而只是创建了互斥锁(也没有所有权)。您可以创建具有初始所有权的Mutex,也可以在需要时调用WaitOne()。 Joe Alabhari的博客提供了更多帮助。
1 2 3 4 5 | public void Application_Launching(object sender, LaunchingEventArgs e) { var myMutex = new Mutex(true,"MUTEX_NAME"); // or call myMutex.WaitOne() // here maybe some timeout handling } |
我也不认为在关闭应用程序之前保持互斥锁不是一个好习惯-仅在确实需要时(例如,访问公用文件)锁定互斥锁。如果您真的想尝试此操作,请在启动时创建一个全局互斥体实例,然后在关闭时释放它,但是无需再次获取它,只需使用以前的实例即可。
请注意一些事情-不要留下废弃的互斥锁,请注意不要被垃圾回收,需要时将其释放。关于此同步对象的文章很多,这里有一个很好的模式。