两个C#之间传值问题
都是C# A:有Form B:无Form
A.Form中设一Button 单击即可传到B中(任一地方)
反过来一样
B运行将数据传入A 与A.Form 中
求高手指点、、
------解决方案-------------------- 什么有form无from?
http://topic.csdn.net/u/20120710/14/c88a8f3c-c096-4f93-a0ee-b82b810ebd9d.html
B传入A用委托事件
------解决方案-------------------- 探讨 什么有form无from? http://topic.csdn.net/u/20120710/14/c88a8f3c-c096-4f93-a0ee-b82b810ebd9d.html B传入A用委托事件
------解决方案-------------------- 1.设置全局静态变量
2.通过属性传值 B中设置属性,A传值给B中属性赋值,B运行完,A通过访问B中属性来取得返回值
------解决方案-------------------- public static 类型 变量名...
------解决方案-------------------- 数据库
文件
socket
通道
WM_COPYDATA
内存映射
内存共享
等等
------解决方案-------------------- 最简单的:设置全局静态变量
最优雅的:使用事件
------解决方案-------------------- 探讨 最简单的:设置全局静态变量 最优雅的:使用事件
------解决方案-------------------- LZ应该指A与B分别为不同进程(A.exe/B.exe),且A/B分别在不同应用程序域。
那么全局静态变量是无法传递的。
比较好的方法应该是
命名管道/匿名管道(3.5或非托管代码)
内存映射文件(4.0或非托管代码)
socket通信(全版本)
也可以使用剪贴板(不推荐)
------解决方案-------------------- 探讨 LZ应该指A与B分别为不同进程(A.exe/B.exe),且A/B分别在不同应用程序域。 那么全局静态变量是无法传递的。 比较好的方法应该是 命名管道/匿名管道(3.5或非托管代码) 内存映射文件(4.0或非托管代码) socket通信(全版本) 也可以使用剪贴板(不推荐)
------解决方案-------------------- 探讨 其实,比较常用的还是WM_COPYDATA
------解决方案-------------------- 探讨 数据库 文件 socket 通道 WM_COPYDATA 内存映射 内存共享 等等
------解决方案-------------------- 内存映射文件比较简单,MSDN上有示例,不过要求.net 4.0。
命名管道稍微复杂,不过功能更强大,MSDN上也有专门的例子
匿名管道相对简单,不过你需要A来启动B(用Proccess,把句柄作为参数传递),并在B中处理启动参数。MSDN上的示例
这些方案都离不开Mutex或者类似的的线程同步类的支持
------解决方案-------------------- 用FindWindow呢
在SendMessage过去咯。。
我就是这么在不同程序里交互实现的呢。
------解决方案-------------------- 定义:
C# code
[DllImport("user32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
------解决方案-------------------- 探讨 LZ应该指A与B分别为不同进程(A.exe/B.exe),且A/B分别在不同应用程序域。 那么全局静态变量是无法传递的。 比较好的方法应该是 命名管道/匿名管道(3.5或非托管代码) 内存映射文件(4.0或非托管代码) socket通信(全版本) 也可以使用剪贴板(不推荐)
------解决方案-------------------- 探讨 用FindWindow呢 在SendMessage过去咯。。 我就是这么在不同程序里交互实现的呢。
------解决方案--------------------