如题,现在我的解决方案中有多个的项目存在,现在有一个项目需要调用到另外一个项目,需要将另一项目的窗口调出来,同时需要传值给改窗口
窗口我已经调出来了,但是值没有办法传过去??
请问改用什么方式传过去参数呢?
我试了在被调用项目的窗体中加静态变量也不行,总是说被调用的窗体中没有包含改变量,但实际上那个静态变量是可以点出来的(就是智能提示中可以出现),为什么?
快点哦,
窗口我已经调出来了,但是值没有办法传过去??
请问改用什么方式传过去参数呢?
我试了在被调用项目的窗体中加静态变量也不行,总是说被调用的窗体中没有包含改变量,但实际上那个静态变量是可以点出来的(就是智能提示中可以出现),为什么?
快点哦,
当然要是程序都是你写的 你可以在那个程序的program.cs里面的 main 方法里加个参数 用来接受参数 然后进行处理
调用的时候就在后面加参数就可以 比如 test.exe help=y
process1.StartInfo.FileName = "XXXX.exe";
this.process1.Start();
所以通过什么静态变量、构造函数、创建实例都不行,我也试过了,不同项目调用窗口也不行。。
难道真的要用二楼说的用文本暂存参数吗,,呵呵,太。麻烦了,我先试试
定义这个form的几个Public的属性
然后show之前,给这几个属性赋值。
那就用线程传递参数啊 线程操作主要用到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");
}
}
让你的XXXX.exe能接受参数
然后
codeprocess1.StartInfo.FileName = "XXXX.exe -param";
this.process1.Start();
如果你要传什么复杂的结构之类的,就看看进程间通讯吧,不是线程间通讯
进程间通讯有一些办法:1.共享内存
2.TCP/IP
3.message queue
4.管道通信
System.AppDomain.CurrentDomain.SetData("字段",值); 取值时候用
System.AppDomain.CurrentDomain.GetData("字段",值);和B/S里面SESSION功能差不多方便
Windows窗体间的数据交互
http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
窗体的参数传递
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx#sec5
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();
}
弄了个例子,这样可以,不知道放到我的项目中行不行,明天上班再弄,先结了