如何在Thread中处理一对象的消息(100分)

  • 主题发起人 主题发起人 snowtree
  • 开始时间 开始时间
S

snowtree

Unregistered / Unconfirmed
GUEST, unregistred user!
我要编一个Thread的类,其中会在Private中声明一对象(比如NMPop3的一对象)。现在要处理该对象的消息(如NMPop3的OnStatus事件),
请问如何才能声明一个Thread的事件(如OnStatus),一边处理NMPop3的
OnStatus事件?
 
定义一个事件属性, 这个过程参数和nmpop3相应事件过程的参数表一样.
比如(假设是个TNotifyEvent型):
YourClass = class(...)
private
....
FNMPop3 : TNMPop3;
....
function GetOnstatus: TNotifyEvent;
procedure WriteOnStatus(AEvent: TNotifyEvent);
public
property OnStatus: TNotifyEvent read GetOnStatus write SetOnStatus;
....


function GetOnStatus: TNotifyEvent;
begin
result := FNMPop3.OnStatus;
end;

procedure SetOnStatus(AEvent: TNotifyEvent);
begin
FNMPop3.OnStatus := AEvent;
end;

使用时要使用NMPop3的OnStatus事件只要给你的类中相应事件赋值就行了.
 
其实以上说主要为用于组件的编写,我觉得可不用
如此麻烦,用一个普通的procedure or function
代替就可以了。
 
agree with spear.

只要在thread的Create方法中写:
FNMPop3.OnStatus := MyOnStatus不就行了吗。
 
张的方法和spear 不能实现,Another_eyes人有一些问题。
 
???
人? 仍?
不管是哪个, 请教哪出问题了?
 
我不知为什么不能实现
 
能解释一下为什么不能实现吗?
我也在编一个类似的程序,而且使用的是类似的方法.
 
Sorry,没问题,闹了半天我没有将POP3的ReportLevel设好
(应为2,默认值为0,此时POP3组件不会送任何Onstatus消息),害得我白忙了几天.
顺便问一下,若在处理Excute方法时需处理多个函数(如BtnClick,Pop3中的
GetMailMessage等),该采取什么措施。我采取的方法是在Excute中加上
Application.ProcessMessages,不知各位高手有何高招.
 
多人接受答案了。
 
后退
顶部