如何防止表单多次打开

时间:2010-10-13 07:52:01

标签: c# winforms forms

我有一个应用程序,其中我有几种形式。在那个表单中,我有一个系统设置表单。我必须从菜单中打开此表单以及在桌面上创建的快捷方式。

我可以单独从2个地方打开表单。但问题是,它打开了两个相同形式的独立实例。这意味着,首先,我点击菜单打开表单。现在我的表单实例已创建,并显示在屏幕上。但每当我点击我的桌面图标时,它就会创建同一表单的另一个实例,而不是显示相同的表单。 。所以这意味着它显示了两个相同形式的实例。

但我只显示一个表格。我也试过网络。我没有找到任何信息。

任何人都可以帮我解决这个问题。任何建议都对我有用。

6 个答案:

答案 0 :(得分:3)

您需要一个实例。此构造已在.Net框架中可用。只需查看汉塞尔曼的this post

注意:我知道这个类的命名空间是 VisualBasic 。但这不应该阻碍您在C#应用程序中使用它。它只是命名空间的名称。它并不意味着它的功能。 (微软最好把它命名为Foo。在这种情况下,它会更受欢迎。)

答案 1 :(得分:2)

听起来,您需要一个互斥锁来控制在给定时间只运行一个应用程序实例。

有关详细信息,请参阅http://iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx

答案 2 :(得分:0)

您必须实现某种锁定机制才能只运行一个程序实例。我想你的系统设置程序可以在程序启动时检查计算机上是否正在运行其他实例,如果是这样,则终止,否则启动一个新实例。

答案 3 :(得分:0)

要再添一个链接,这篇文章似乎涵盖了(我的理解)你想要做的事情。

http://dotnetperls.com/single-instance-windows-form

答案 4 :(得分:0)

我用semaphor概念来控制它。每当表单打开时,我都会写入注册表。表格关闭后,我将删除此条目。

因此,每当我尝试打开表单时,它都会检查注册表项。基于此,它将打开表格。

答案 5 :(得分:0)

听起来你需要Singleton设计模式的修改版本。尝试在类内部使用公共静态方法,该方法在内部调用表单的构造函数。然后,当有人建议使用计数器变量来跟踪静态方法被调用的次数,从而为您提供一个度量,您可以使用它来确保在创建实例时只需要所需的数字。