阻止Silverlight Out-Of-Browser App打开两次

时间:2015-03-23 15:22:06

标签: c# silverlight silverlight-5.0 out-of-browser

我试图阻止Silverlight OOB应用程序打开两次,但我不知道如何。

我尝试在应用程序启动后使用“FileShare.None”直接创建FileStream,当应用程序打开两次并尝试打开文件时抛出错误,但它的丑陋并且因为FileStream似乎不起作用大约30秒后被释放..

 FileStream s2 = new FileStream(path, FileMode.OpenOrCreate,FileAccess.ReadWrite, FileShare.None);

知道我怎么能接近这个吗?

谢谢,phil

1 个答案:

答案 0 :(得分:1)

实现此目的的一种方法是使用Silverlight应用程序之间的本地消息传递通道。 MSDN中提到了这种情况,我将在这里进一步扩展。

LocalMessageReceiver类允许您注册主要用于在不同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;
    }
}

此解决方案的一个优点是,无论您的实例是在浏览器中还是在浏览器外,它都能正常工作。