//close visual studio to test the project.
//normal, you should use
//if(p.ProcessName == processName)
//debug
if (p.ProcessName.StartsWith(processName))
return p;
//release
if (p.ProcessName == processName)
return p;
}
return null;
}
关闭FileMapping:
private void Server_FormClosing(
object sender, FormClosingEventArgs e)
{
if (mappingHandle != IntPtr.Zero)
{
Win32Wrapper.UnmapViewOfFile(mappingHandle);
Win32Wrapper.CloseHandle(mappingHandle);
}
if (fileHandle != IntPtr.Zero)
Win32Wrapper.CloseHandle(fileHandle);
}
Client端代码:
当有Message收到时接收发送的数据:
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case Win32Wrapper.WM_USER_DATAREADY:
RecevieMessage();
break;
default:
base.WndProc(ref m);
break;
}
}
private void RecevieMessage()
{
IntPtr handle = Win32Wrapper.OpenFileMapping(
(int)MapProtection.PageReadWrite, false,
Win32Wrapper.MappingFileName);
IntPtr mappingFile = Win32Wrapper.MapViewOfFile(
handle, (int)MapAccess.FileMapRead,
0, 0, new IntPtr(1024));
//Marshal.GetLastWin32Error();
byte[] msg = new byte[1024];
Marshal.Copy(mappingFile, msg, 0, 1024);
string message = Encoding.ASCII.GetString(msg);
this.listBox1.Items.Add(message);
Win32Wrapper.UnmapViewOfFile(mappingFile);
Win32Wrapper.CloseHandle(mappingFile);
Win32Wrapper.CloseHandle(handle);
}