如题,现在我的解决方案中有多个的项目存在,现在有一个项目需要调用到另外一个项目,需要将另一项目的窗口调出来,同时需要传值给改窗口
窗口我已经调出来了,但是值没有办法传过去??
请问改用什么方式传过去参数呢?
我试了在被调用项目的窗体中加静态变量也不行,总是说被调用的窗体中没有包含改变量,但实际上那个静态变量是可以点出来的(就是智能提示中可以出现),为什么?
快点哦,

解决方案 »

  1.   

    你需要用反射好像有个medol.loadmodel  加载那个程序后 好像有个方法加invoke可以调用其方法
    当然要是程序都是你写的 你可以在那个程序的program.cs里面的 main 方法里加个参数 用来接受参数 然后进行处理
    调用的时候就在后面加参数就可以 比如 test.exe help=y
      

  2.   

    哦,不是通过窗口调用的,是通过创建新进程来调用那个目标项目生成的exe可执行文件的。如下
    process1.StartInfo.FileName = "XXXX.exe";
                this.process1.Start();
    所以通过什么静态变量、构造函数、创建实例都不行,我也试过了,不同项目调用窗口也不行。。
    难道真的要用二楼说的用文本暂存参数吗,,呵呵,太。麻烦了,我先试试
      

  3.   


    定义这个form的几个Public的属性
    然后show之前,给这几个属性赋值。
      

  4.   


    那就用线程传递参数啊  线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提供给我们四个重载的构造函数(以下引自msdn)。 Thread (ParameterizedThreadStart)  初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托。  
    Thread (ThreadStart)  初始化 Thread 类的新实例。 
    由 .NET Compact Framework 支持。 
     
    Thread (ParameterizedThreadStart, Int32)  初始化 Thread 类的新实例,指定允许对象在线程启动时传递给线程的委托,并指定线程的最大堆栈大小。  
    Thread (ThreadStart, Int32)  初始化 Thread 类的新实例,指定线程的最大堆栈大小。 
    由 .NET Compact Framework 支持。
     
         我们如果定义不带参数的线程,可以用ThreadStart,带一个参数的用ParameterizedThreadStart。带多个参数的用另外的方法,下面逐一讲述。一、不带参数的using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;namespace AAAAAA
    {
        class AAA
        {
            public static void Main()
            {
                Thread t = new Thread(new ThreadStart(A));
                t.Start();            Console.Read();
            }        private static void A()
            {
                Console.WriteLine("Method A!");
            }
        }
    }
           结果显示Method A!二、带一个参数的     由于ParameterizedThreadStart要求参数类型必须为object,所以定义的方法B形参类型必须为object。using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;namespace AAAAAA
    {
        class AAA
        {
            public static void Main()
            {         
                Thread t = new Thread(new ParameterizedThreadStart(B));
                t.Start("B");            Console.Read();
            }        private static void B(object obj)
            {
                Console.WriteLine("Method {0}!",obj.ToString ());        }
        }
    }
      结果显示Method B! 三、带多个参数的     由于Thread默认只提供了这两种构造函数,如果需要传递多个参数,我们可以自己将参数作为类的属性。定义类的对象时候实例化这个属性,然后进行操作。using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;namespace AAAAAA
    {
        class AAA
        {
            public static void Main()
            {
                My m = new My();
                m.x = 2;
                m.y = 3;            Thread t = new Thread(new ThreadStart(m.C));
                t.Start();            Console.Read();
            }
        }    class My
        {
            public int x, y;        public void C()
            {
                Console.WriteLine("x={0},y={1}", this.x, this.y);
            }
        }
    }
          结果显示x=2,y=3 四、利用结构体给参数传值。定义公用的public struct,里面可以定义自己需要的参数,然后在需要添加线程的时候,可以定义结构体的实例。//结构体
      struct RowCol
        {
            public int row;
            public int col;
        };//定义方法
     public void Output(Object rc)
            {
                RowCol rowCol = (RowCol)rc;
                for (int i = 0; i < rowCol.row; i++)
                {
                    for (int j = 0; j < rowCol.col; j++)
                        Console.Write("{0} ", _char);
                    Console.Write("\n");
                }
            }
      

  5.   

    no thread, only process
    让你的XXXX.exe能接受参数
    然后
    codeprocess1.StartInfo.FileName = "XXXX.exe -param"; 
                this.process1.Start(); 
    如果你要传什么复杂的结构之类的,就看看进程间通讯吧,不是线程间通讯
      

  6.   


    进程间通讯有一些办法:1.共享内存
    2.TCP/IP
    3.message queue
    4.管道通信
      

  7.   


     System.AppDomain.CurrentDomain.SetData("字段",值); 取值时候用
     System.AppDomain.CurrentDomain.GetData("字段",值);和B/S里面SESSION功能差不多方便
      

  8.   

    如果项目之间是通过引用方式进行关联的,通过属性或方法都可以进行数据交换,不知道楼主说的是哪一种,数据交换可以参考这里的文章。
    Windows窗体间的数据交互
    http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
    窗体的参数传递
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
      

  9.   

    发送:
    private void button2_Click(object sender, EventArgs e)
            {
                //process1 = new System.Diagnostics.Process();
                //process1.StartInfo.FileName = "WindowsApplication1.exe";
                //this.process1.Start();
                System.Diagnostics.Process.Start("WindowsApplication1.exe", "sssssss");
            }
    接收参数:
     
    /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1(args));
            }接收数据:
    public string aa="";
     public Form1(string[] a)
            {
                aa = "我是进程调用传过来的:"+a.GetValue(0).ToString();
                InitializeComponent();
            }
    弄了个例子,这样可以,不知道放到我的项目中行不行,明天上班再弄,先结了