Many ways. You could use static field, file mapping technology, system message... You could search related information in Microsoft web site, to choose proper way for you.Hope it could be help.

解决方案 »

  1.   

    这样嘛
    string Deliver;
    public Form2(string deliveryString)
    {
    Deliver=deliveryString;
                       }应用是加上参数
      

  2.   

    不是一个类的两个实例, 是一个EXE的两个实例
      

  3.   

    贴主的意思恐怕是不让一个exe执行两次,当第二个exe启动时,判断第一个exe是否在运行,如果是,则激活第一个exe,对吧?
    以前在vb6,我用过findwindow的方法。把你的exe的主窗体的标题栏文本弄得特殊一点,例如把软件名称写全,然后第二个exe先不显示,用findwindow找到第一个exe的主窗口句柄,然后setwindowpos,让其恢复,并带到前台即可。
      

  4.   

    to:DragonCity(自己发工资)
    你的理解很正确,你的方法也可以,不过如果能通过.net的类来实现就最好,API是不得已的办法。
    我试过用查找进程的方法,不知道为什么总是提示进程被锁定,无法访问其中的属性。
      

  5.   

    用.net的process类来解决这个问题,process类里提供了详细的说明
      

  6.   

    Process 组件提供对正在计算机上运行的进程的访问。用最简短的话来说,进程就是当前运行的应用程序。线程是操作系统向其分配处理器时间的基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。对于启动、停止、控制和监视应用程序等任务,Process 组件是很有用的工具。使用 Process 组件,可以获取当前运行的进程的列表,或者启动新的进程。Process 组件用于访问系统进程。初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。进程组件同时获取有关一组属性的信息。Process 组件获取有关任一组的一个成员的信息后,它将缓存该组中其他属性的值,并且在您调用 Refresh 方法之前,不获取有关该组中其他成员的新信息。因此,不保证属性值比对 Refresh 方法的最后一次调用更新。组细分与操作系统有关。系统进程在系统上由其进程标识符唯一标识。与许多 Windows 资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。句柄是表示资源标识符的一般术语。即使进程已退出,操作系统仍保持进程句柄,该句柄通过 Process 组件的 Handle 属性访问。因此,可以获取进程的管理信息,如 ExitCode(通常,或者为零表示成功,或者为非零错误代码)和 ExitTime。句柄是非常有价值的资源,所以句柄泄漏比内存泄漏危害更大。
      

  7.   

    如果只是判断是否已经有实例存在,那么使用Mutex就可以了:
    using System;
    using System.Threading;public class MutexTest {
    public static void Main () {
    bool notexist;
    Mutex m = new Mutex(true, "MyTest", out notexist);
    if (notexist) {
    Console.WriteLine("This is the first instance of the process!");
    } else {
    Console.WriteLine("There is already one instance of the process exist!");
    }
    Console.ReadLine();
    }
    }如果要进一步通信的话,建议可以使用.NET Remoting(需要占用一个网络端口)。