防止 Silverlight Out-Of-Browser 应用程序打开两次
Prevent Silverlight Out-Of-Browser App from opening twice
我试图阻止 Silverlight OOB 应用程序打开两次,但我不知道该怎么做。
我尝试在使用 "FileShare.None" 启动应用程序后直接创建一个 FileStream,以便在应用程序打开两次并尝试打开文件时抛出错误,但它很丑陋并且无法正常工作,因为 FileStream大概30秒后就可以释放了..
FileStream s2 = new FileStream(path, FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.None);
知道我该如何处理吗?
谢谢,菲尔
实现此目的的一种方法是在 Silverlight 应用程序之间使用本地消息传递通道。这个场景在MSDN中有提到,我这里稍微展开一下。
LocalMessageReceiver class 允许您注册消息服务,主要用于在不同的 Silverlight 应用程序之间进行通信。
诀窍是您只能在特定范围内使用相同名称注册一次。因此,如果第一个实例使用您的应用程序名称注册自己,则之后执行相同操作的任何其他实例都会触发异常。然后你只需要捕获那个异常并处理它,这取决于你想做什么(关闭实例,显示消息等)
这是我使用的代码:
private bool CheckSingleInstance()
{
try
{
var receiver = new LocalMessageReceiver("application name", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
receiver.Listen();
return true;
}
catch (ListenFailedException)
{
// A listener with this name already exists
return false;
}
}
此解决方案的一个优点是,无论您的实例是在浏览器内还是在浏览器外,它都适用。
我试图阻止 Silverlight OOB 应用程序打开两次,但我不知道该怎么做。
我尝试在使用 "FileShare.None" 启动应用程序后直接创建一个 FileStream,以便在应用程序打开两次并尝试打开文件时抛出错误,但它很丑陋并且无法正常工作,因为 FileStream大概30秒后就可以释放了..
FileStream s2 = new FileStream(path, FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.None);
知道我该如何处理吗?
谢谢,菲尔
实现此目的的一种方法是在 Silverlight 应用程序之间使用本地消息传递通道。这个场景在MSDN中有提到,我这里稍微展开一下。
LocalMessageReceiver class 允许您注册消息服务,主要用于在不同的 Silverlight 应用程序之间进行通信。
诀窍是您只能在特定范围内使用相同名称注册一次。因此,如果第一个实例使用您的应用程序名称注册自己,则之后执行相同操作的任何其他实例都会触发异常。然后你只需要捕获那个异常并处理它,这取决于你想做什么(关闭实例,显示消息等)
这是我使用的代码:
private bool CheckSingleInstance()
{
try
{
var receiver = new LocalMessageReceiver("application name", ReceiverNameScope.Global, LocalMessageReceiver.AnyDomain);
receiver.Listen();
return true;
}
catch (ListenFailedException)
{
// A listener with this name already exists
return false;
}
}
此解决方案的一个优点是,无论您的实例是在浏览器内还是在浏览器外,它都适用。