我正在进行多实例应用程序有应用程序更新功能,从互联网下载更新并安装它。
现在问题是如果有多个实例打开然后所有尝试安装更新导致错误。
简单的代码片段我在阅读完教程后学到了。
static bool IsSingleInstance()
{
try
{
// Try to open existing mutex.
Mutex.OpenExisting("myMutex");
}
catch
{
// If exception occurred, there is no such mutex.
Window1.mutex = new Mutex(true, "myMutex");
// Only one instance.
return true;
}
// More than one instance.
return false;
}
我是C#的新手。所以有人可以告诉我如何使用Mutex来确保只有一个实例可以下载并安装更新 如果您对此主题有所了解,请告知相关教程的链接。
答案 0 :(得分:2)
通过
使互斥锁全局化 Window1.mutex = new Mutex(true, "Global\\myMutex");
Mutex.OpenExisting("Global\\myMutex");
答案 1 :(得分:0)
我认为你错过了很多可能的例外,这个例子更适合处理你可能遇到的各种错误, Mutex.OpenExisting Method example on MSDN
答案 2 :(得分:0)
这里的问题是你在OpenExisting
和'新Mutex`的通话之间有时间差
所以,我实现你需要的东西可能看起来像这样。
class YourApp : IDisposable
{
private readonly Mutex _mutex;
private bool _isFirstInstance;
public YourApp()
{
_mutex = new Mutex(false, "myMutex");
}
~YourApp()
{
this.Dispose(false);
GC.SurpressFinalize(this);
}
public bool IsFirstInstance
{
if(_isFirstInstance)
return true;
_isFirstInstance = _mutex.WaitOne (TimeSpan.FromSeconds(1d), false);
return _isFirstInstance;
}
private bool IsDisposed { get; set; }
public void Dispose()
{
this.Dispose(true);
}
private void Dispose(bool disposing)
{
if(this.IsDisposed)
return;
if(disposing)
_mutex.Dispose();
this.IsDisposed = true;
}
}
这是我用于此答案的参考:Threading in C#: Mutex