实现只能运行一个实例,当第二次双击程序运行时把第一个激活并传递参数进去

问题描述

using Microsoft.VisualBasic.ApplicationServices;  staticvoidMain(string[]args)  {  AppmyApp=newApp();  myApp.Run(args);  }  classApp:WindowsFormsApplicationBase  {  publicApp()  {  //设置单例模式  this.IsSingleInstance=true;  //设置可用于XP窗口样式  this.EnableVisualStyles=true;  //窗口关闭时的操作  this.ShutdownStyle=ShutdownMode.AfterMainFormCloses;  }  ///<summary>  ///重写OnCreateMainForm()函数  ///</summary>  protectedoverridevoidOnCreateMainForm()  {  this.MainForm=newFormMain();  }  }  }我这里已经实现了只能运行一个实例并激活,但是不知道怎么传递参数过去。。

解决方案

解决方案二:
人工置顶求高手支招~~
解决方案三:
没看明白,什么参数往什么地方传,也没看到单例模式的实现方法
解决方案四:
引用2楼thinkingforever的回复:

没看明白,什么参数往什么地方传,也没看到单例模式的实现方法

就是说第一次运行这个程序就是普通程序没问题第二次运行这个程序的时候我想要的是把第一次那个实例激活而不是再运行这个程序而我第二次运行的时候可能是这样调用的test.exeTwoRun也就是说要把这个TwoRun这个参数传递到第一个实例并且让他作出反应比如说把这个参数弹出来什么的
解决方案五:
运行一个实例用你的方式无法进行数据传递,你应该使用命名Mutex对实例数进行控制。数据传递这块你可以看下进程间的IPC或者管道通信,这块不太熟,你最好查一下
解决方案六:
引用4楼viewstates的回复:

运行一个实例用你的方式无法进行数据传递,你应该使用命名Mutex对实例数进行控制。数据传递这块你可以看下进程间的IPC或者管道通信,这块不太熟,你最好查一下

百度上对C#的管道通讯资料少~~

时间: 2024-11-16 14:26:16

实现只能运行一个实例,当第二次双击程序运行时把第一个激活并传递参数进去的相关文章

如何让VC和Delphi程序只运行一个实例

有些时候,我们需要我们的程序只运行一个实例,笔者自己作程序也有这样的情况,于是自已探究一番.忙活一阵后,总算小有收获,不敢独享,在天极发表出来,供大家参考. 既然是从根本上解决问题,对于Windows程序而言,就从WinMain函数入口,这是因为在VC中使用SDK的方式编写程序最透明,并且WinMain是作为VC编译器生成EXE文件的默认入口函数. WinMain的函数原型: int WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, L

wpf只运行一个实例

原文:wpf只运行一个实例在winform下,只运行一个实例只需这样就可以: 1. 首先要添加如下的namespace: using System.Threading; 2. 修改系统Main函数,大致如下:         bool bCreatedNew;               //Create a new mutex using specific mutex name         Mutex m =new Mutex( false, "myUniqueName", ou

WinForm限制客户程序只能运行一个实例

WinForm限制客户程序只能运行一个实例: using System; using System.Threading; static void Main() { bool create = false; using (Mutex mu = new Mutex(true, Application.ProductName, out create)) { if (create) { Application.Run( new MainForm() ); } else { MessageBox.Show

Qt之运行一个实例进程

简述 发布程序的时候,我们往往会遇到这种情况: 只需要用户运行一个实例进程 用户可以同时运行多个实例进程 一个实例进程的软件有很多,例如:360.酷狗- 多个实例进程的软件也很多,例如:Visual Studio.Qt Ctretor.QQ- 下面我们来介绍下如何实现一个实例进程. 简述 QSharedMemory QLocalServer QtSingleApplication 任务列表 更多参考 QSharedMemory 使用共享内存来实现,key值唯一,一般可以用组织名+应用名来确定.

QT中实现程序只运行一个实例--应用程序的单例化

起因 最近想实现一个应用程序单例化的程序, 目前使QT运行一个实例有如下几种方式 1.QSharedMemory 使用共享内存,当第二个进程启动时,判断内存区数据是否建立,如有,则退出; 这种方式有弊端,在程序发生崩溃时,未及时清除共享区数据,导致程序不能正常启动. 2.文件锁 在程序运行的时候就在目录下创建一个文件,当程序运行时就判断这个文件是否存在,如果存在说明程序已经在运行.其本质与QSharedMemory相同 3.利用QLocalServer 参照 Qt实现应用程序单实例运行–Loca

如何使应用程序只运行一个实例

要使应用程序只运行一个实例,一个简单的方法是在应用程序类中使用互斥量,这可以用VC下的GUIDGEN.EXE程序产生.GUIDGEN.EXE位于VC安装目录CommonTools目录下 实例 1: 新建一基于对话框的工程ex1,采用默认设置 2: 用GUIDGEN.EXE产生一个全局标志,#define one "产生的全局标志" 本例中产生的语句如下:#define one "0xbe8e2ce1, 0xdab6, 0x11d6, 0xad, 0xd0, 0x0, 0xe0

方法-C#智能设备应用程序怎么实现只能打开一个实例

问题描述 C#智能设备应用程序怎么实现只能打开一个实例 C#智能设备应用程序怎么实现只能打开一个实例 ,试过mutex方法不行,只能设备应用程序只有默认的构造函数和含有一个参数的构造函数 解决方案 在Main里面写int i = 0;foreach (Process p in Process.GetProcesses()){ if (p.Name == Process.Current.Name) i++;}if (i > 1) return;... 你的代码 解决方案二: mutex 确定是可以

购物车中只能添加一个商品,第二次添加就会把第一次给覆盖掉了,怎么办?

问题描述 action中的代码如下:import java.util.Date;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import org.apache.struts2.interceptor.SessionAware;import com.opensympho

bat脚本实例实现只允许运行一个实例(安装程序、创建快捷方式脚本)_DOS/BAT

复制代码 代码如下: ;我的第一个安装脚本!include "MUI2.nsh"!define DIR "D:\workspace\nsis\files" Name "安装程序"Icon "${DIR}\setup128.ico"OutFile "setup.exe"InstallDir "$PROGRAMFILES\kaserv"RequestExecutionLevel admin