应用程序是围绕使用进程内COM服务器作为插件的独立应用程序构建的。通信插件通过interop与C#层连接,并在调用C#异步连接方法(本身使用C#线程)" GetFunctionPointerForDelegate"用于通知状态已更改为Delphi COM服务器。
看起来不同的threadID是在记录回调方法收到的threadID之后通过回调指针回调Delphi COM服务器。由于这些回调是异步接收的(afaik),我想知道它是否需要:
a)在触发时直接处理它们(在调用线程上下文中?):
Application.mainthreadID
- COM Server threadId
- callback (threadId=1) : callback processing...
- callback (threadId=2) : callback processing...
b)将这些回调发送到COM服务器mainthread(在COM服务器线程上下文中处理它们):
Application.mainthreadID
- COM Server threadId
- custom dynamic "WndProc"
- callback (threadId=1) : Dispatch/PostMessage...
- callback (threadId=2) : Dispatch/PostMessage...
为了将这些C#回调分派给COM服务器mainthread,使用自定义" WndProc"动态创建窗口子类(在COM服务器内)。接收自定义WM_XXX调度消息:
TFooCOMServer.CallbackEntryPoint1(...)
PostMessage(hWnd, WM_CUSTOM_CALLBACK1, wParam, lParam);
TFooCOMServer.CustonWndProc( Msg : TMesssage);
...
Case Msg.message of
WM_CUSTOM_CALLBACK1 : OnCustomCallBack(param1,param2);
...
end;
我对这个COM /多线程应用程序模式的疑问是:
提前感谢您对此主题的帮助。