调用sendmessage进行进程通讯时,wpf接收方进行任何界面操作都会报因为应用程序正在发送一个输入同步呼叫,所以无法执行呼出的呼叫这个错误,
sendmessage是同步的,会阻塞界面线程,如果这时候调用界面操作就会报错,发送端把sendmessage修改为sendnotifymessage 不会阻塞线程界面,再把操作界面部分新开一个线程处理就不会报错了
private IntPtr MainWindowProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_COPYDATA:
{
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
COPYDATASTRUCT MyKeyboardHookStruct = (COPYDATASTRUCT)Marshal.PtrToStructure(lParam, typeof(COPYDATASTRUCT));
string ReceiveMsg = MyKeyboardHookStruct.lpData;
this.Dispatcher.Invoke((Action)(() =>
{
System.Threading.Thread thread = new System.Threading.Thread(Load);
thread.IsBackground = true;
thread.Start();
}));
break;
}
default:
{
break;
}
}
return IntPtr.Zero;
}
浙公网安备 33010602011771号