日期:2014-05-18  浏览次数:20903 次

两个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过去咯。。
我就是这么在不同程序里交互实现的呢。

------解决方案--------------------