相关疑难解决方法(0)

PostMessage在线程中返回"无效窗口句柄"

背景:我正在使用OmniThreadLibrary在后台加载批处理模式ADO存储过程.我打开SP之后通过交换连接做了一些略显狡猾的事情,但这看起来非常可靠.我正在使用PostMessage将消息发送回调用表单,这在我的测试应用程序中有效.Primoz的comms频道为我工作,我正在使用它们进行线程间通信,但对于我们的主应用程序,我试图通过使用标准的PostMessage调用来避免这种依赖,就像我们在app中的其他地方一样.

问题:不幸的是,当我把它放到我们的主应用程序中时,PostMessage调用线程开始失败1400:无效的窗口句柄.

我已经自由地添加了额外的PostMessage调用和日志代码来尝试找到问题,但我现在已经没有想法了.代码是样板:

const WM_PW_ADLQUEUEEMPTY = WM_USER + 11;
...
if PostMessage (OwnerHandle, WM_PW_ADLPROGRESS, QueueID, 10) then
    pwDebugLog ('TADLQueue.Run WM_PW_ADLPROGRESS send to  ' + IntToHex (OwnerHandle, 8) + ' (IsWindow '+BoolToStr(IsWindow(OwnerHandle),true)+')     OK for Queue ' + IntToStr (QueueID))
else
    pwDebugLog ('TADLQueue.Run WM_PW_ADLPROGRESS send to  ' + IntToHex (OwnerHandle, 8) + ' (IsWindow '+BoolToStr(IsWindow(OwnerHandle),true)+') failed for Queue ' + IntToStr (QueueID));
Run Code Online (Sandbox Code Playgroud)

但是一系列电话的日志对我来说并不是很有启发性.请注意,时间之后的四个十六进制数字是来自GetCurrentThreadID的线程ID.

15:41:53.221 1614  TpwAsyncDataLoader.RunQueue WM_PW_ADLPROGRESS send to  00A5110C (IsWindow True)    OK for Queue -6
15:41:53.265 13B4  TADLQueue.Run WM_PW_ADLPROGRESS …
Run Code Online (Sandbox Code Playgroud)

delphi messaging multithreading delphi-2010

6
推荐指数
1
解决办法
2908
查看次数

标签 统计

delphi ×1

delphi-2010 ×1

messaging ×1

multithreading ×1