防止 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;
    }
}

此解决方案的一个优点是,无论您的实例是在浏览器内还是在浏览器外,它都适用。