3

我有一个用 Silverlight 编写的应用程序,可在 Mac 和 Windows 平台上使用。作为其功能的一部分,它必须只允许运行一个。我们使用LocalMessageReceiver 方法实现了这一点,它按预期工作。

但是,我们在 Mac 上遇到了问题。如果应用程序崩溃或强制退出,则无法重新启动应用程序,因为单实例代码报告应用程序已在运行。到目前为止,我们发现的唯一办法是重新启动计算机。然而,这充其量是不方便的。

Mac OS X 上有没有办法清除 LocalMessageReceiver 使用的资源而无需重新启动计算机?我假设系统中某处有共享资源,但我没有找到任何文档讨论这些资源是什么或如何重置它们。

4

1 回答 1

1

嗯......因为没有其他人回答......这是我的解决方法;我无法明确设置代码,但我可以让您了解:

如果您无法在 LocalMessageReceiver() 上收听,可能有两个原因

  1. 因为有一个真正的其他 silverlight 实例正在运行
  2. 因为发生了崩溃并且资源没有被正确清除

区分原因的技巧是尝试与 LocalMessageReceiver 通信。设置一个 LocalmessageSender,为响应添加一个句柄并尝试发送消息。

“真正的”其他 silverlight 实例会回复。崩溃剩余没有。所以你可以等待一个合理的超时来回复。

如果没有(所以这是崩溃),你有一些策略:例如,你可以设置一个新的 LocalMessageReceiver (带有“后备”名称)来检查其他实例或类似的东西。

于 2013-07-30T15:48:58.167 回答