[VB.NET]求问高手 进程间大数据的交换 最好方法!
2008-12-28 20:48
295 查看
求问高手 进程间大数据的交换 最好方法!
有点糊涂,望高手指点迷津
__________________________________________________________________________
有点糊涂,望高手指点迷津
__________________________________________________________________________
顶一下 本人还是喜欢共享内存的方式,对其他没太多的了解,比如通道之类的,望大家指点
__________________________________________________________________________
希望做过的朋友帮忙
__________________________________________________________________________
共享内存的方式不行吗?我们很大的XML文件都是共享内存?有什么问题?
__________________________________________________________________________
?????
__________________________________________________________________________
好像据说FILEMAPPING是最好最安全的
__________________________________________________________________________
共享内存了
__________________________________________________________________________
共享内存?
__________________________________________________________________________
顶,这方面没有做过
__________________________________________________________________________
学习之....
__________________________________________________________________________ http://www.x2blog.cn/jinhong618/
.Net 并没有提供进程间通讯的类,只能借助系统的功能来实现了,这里提供一种利用发送消息的方法实现的进程间的通信。
发送方需要调用两个系统API:SendMessage与FindWindow。
非托管定义如下:
[DllImport( User32.dll ,EntryPoint= SendMessage )]
private static extern int SendMessage(
int hWnd, //目标窗口的handle
int Msg, // 消息
int wParam, // 第一个消息参数
ref COPYDATASTRUCT lParam // 第二个消息参数
);
[DllImport( User32.dll ,EntryPoint= FindWindow )]
private static extern int FindWindow(string lpClassName,string
lpWindowName);
还有一个数据结构:
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)] public string lpData;
}
WM_COPYDATA消息:
const int WM_COPYDATA = 0x004A;
发送消息代码如下:
int WINDOW_HANDLER = FindWindow(null,@ 接收窗口 );
if(WINDOW_HANDLER != 0)
{
byte[] sarr = System.Text.Encoding.Default.GetBytes(txtMsg.Text);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr) 100;
cds.lpData = txtMsg.Text;
cds.cbData = len + 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
接收方需要上面的那个数据结构的定义与消息常量的定义,然后重写主窗口的DefWndProc方法:
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch(m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
mystr =(COPYDATASTRUCT)m.GetLParam(mytype);
txtMsg.Text =mystr.lpData;
break;
default:
base.DefWndProc(ref m);
break;
}
}
==================================================================
博客空间:http://blog.csdn.net/lovingkiss
资源下载:http://download.csdn.net/user/lovingkiss
优惠接单开发,组件控件定制开发,成品源代码批发
联系方式:Q64180940 全天在线
==================================================================
__________________________________________________________________________
相关文章推荐
- [VB.NET]各路高手如何杀死数据库进程
- vb.net启动本地程序,并读入数据的实现方法
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- [VB.NET]请教高手:如何使用listview控件从缓冲区中一次性添加多条数据???
- 实现进程间数据交换的两种方法和应用
- VB.NET两个LISTBOX进行交换数据
- .NET程序的进程间数据交换.
- VB.NET中,利用API杀掉Excel进程的方法
- ASP.NET(VB)把数据导出到EXCEL的一种方法(网上转载)
- VB.NET用Marshal.PtrToStructure 方法实现数据在数组和结构间复制
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- linux 内核进程与用户进程的通信 方法一 使用sockopt与内核交换数据
- VB.net读写二进制数据方法
- VB.NET中treeview使用方法二与access数据库的数据绑定
- [VB.NET]form初始化事件的解决方法,高手请进...
- 分别介绍以下数据提供者连接各种数据库的方法 (vb.net)
- 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
- python使用Queue在多个子进程间交换数据的方法
- VB.NET 异步读取数据方法之二
- 在VB.NET中 用代码 利用SQL语句创建数据库、表、存储过程、视图、索引、规则、修改表、查看数据等的方法