Tim*_*Tim 6 c# mutex compact-framework windows-mobile-6.5
我很难在没有命名的情况下弄清楚互斥锁的优点.具体来说,我想让我的Windows Mobile 6.5应用程序单实例.
关于如何做到这一点,这个网站上有一些问题和答案 - 最好的问题和答案似乎使用了命名的互斥体.
不幸的是,紧凑框架中的互斥体的CTORS不需要字符串 - 只能创建一个互斥锁.
现在,如果没有关联的ID,互斥量有什么用呢?
我错过了什么吗?
如果我不能命名它们,如何使用互斥锁来保护多个应用程序中的资源?
vcs*_*nes 14
在紧凑的框架本身,没有没有.
如果您不能命名,互斥锁有什么用?
据说一个未命名的互斥锁是一个本地互斥锁.您仍然可以使用它在同一进程中的不同线程之间进行同步.像lock关键字这样的监视器没有相同的功能.正如ctacke所说,Mutex不允许递归入口.此外,不能跨AppDomain边界使用监视器.此外,Mutex可以与WaitHandle.WaitAll等有用的东西一起使用,或者WaitAny,监视器不能与任何这些东西一起使用.
我错过了什么吗?
否 - 在.NET CF Framework中,如果没有平台调用的帮助,则无法命名互斥锁.
如果我不能命名它们,如何使用互斥锁来保护多个应用程序中的资源?
你必须命名它们 - 你可以这样做,你只需要求助于一些平台调用.基于Windows CE的系统已经支持命名的互斥锁一段时间了.您可以编写自己执行的P/Invoke调用:
[DllImport("Coredll.dll")]
public static extern IntPtr CreateMutex(IntPtr lpMutexAttributes, bool initialOwner, string lpName);
Run Code Online (Sandbox Code Playgroud)
并将其用作(例如) CreateMutex(IntPtr.Zero, false, "MutexName");
你还必须写的P/Invoke要求ReleaseMutex和CloseHandle.
具体来说,我想让我的Windows Mobile 6.5应用程序单实例.
命名互斥是一种解决方案.可能适合您的另一个解决方案是使用文件锁.
FileShare.None.程序关闭时,清理锁.即使进程异常崩溃或终止,也应删除对文件的锁定,以允许另一个实例启动.像这样的东西:
FileStream stream;
try
{
stream = new FileStream("lock.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
}
catch
{
MessageBox.Show("Program is already running.");
return;
}
//Put your application code here.
MessageBox.Show("Program is now running.");
stream.Close();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3230 次 |
| 最近记录: |