2010-10-13 101 views
2

我有一个应用程序,我有几种形式。在这种形式下,我有一个系统设置窗体。我必须从菜单中打开此表单以及在桌面上创建的快捷方式。如何防止窗体多次打开

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

但我只显示一个表单。我也试过并在网上搜索过。我没有找到任何信息。

任何人都可以请帮我解决这个问题。任何类型的建议对我来说都会很有帮助。

+0

这听起来像你有2个应用程序运行,这是正确的吗? – leppie 2010-10-13 07:53:00

+0

您提到的桌面图标是一个Windows桌面 - 如果是这样,您正在创建一个全新的应用程序实例。你想让你的应用程序暂时不用一次? – riffnl 2010-10-13 07:54:16

+0

抱歉的延迟,其实我的桌面快捷方式也是一个EXE(来源),这将打开一个特定的形式在目标EXE。如果我们在目标exe文件中,那么我们可以使用互斥锁或单例打开窗体的一个实例。但由于请求来自另一个exe文件。即源码EXE,这个互斥概念也不起作用。 – Dinesh 2010-10-14 04:52:59

回答

0

我已经使用semaphor概念来进行控制。每当表单被打开时,我正在写入一个注册表项。一旦表格关闭,我将删除此条目。

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

2

听起来对我来说,你需要一个互斥来控制在给定的时间只有一个应用程序实例正在运行。

进一步的细节

3

您需要一个实例。这个构造在.Net框架中已经可用。请查看Hanselman的this post

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

0

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