我想实现类似迅雷的悬浮窗体,且不受showdialog影响。
现在可以实现始终最前,但是当用showdialog打开一个子窗体时,悬浮窗还是最前,但不能操作了。
有什么办法可以让他不受影响吗?
我开迅雷软件看了下,当你新建任务时,主窗体是不能操作的,而悬浮窗还可以操作。
是不是因为MDI窗体啊,showdialog有父子关系,而你的悬浮窗不给父子关系。
http://www.cnblogs.com/renhaojie/archive/2009/09/10/1564030.html
不是因为父子关系的原因。showdialog()打开的窗体,要等窗体关闭后才能操作其他窗体。
而如果把showdialog改成show(),那就没事了。不过我这里必须用showdialog()。
我现在就想悬浮窗不受这个影响。
@hjx595: showdialog是模态窗体,阻塞了消息队列吧。要不试试在showdialog打开的窗体上调用Application.DoEvent()让其执行别的消息试试。http://q.cnblogs.com/q/47023/
@滴答的雨: 不懂。Application.DoEvent()不是执行消息队列上的任务吗?showdialog()时已经把其他窗体的消息都堵死了,发不出去,怎么可能处理呢。我也试了另开线程启动悬浮窗,但是更新UI还是要回到主线程,消息一样阻塞了。
@hjx595: showdialog()阻塞了消息队列,但是如果在showdialog的窗体上开一个辅助线程去以一定方式轮询调用Application.DoEvent()使其他消息得到响应,这样就可以让悬乎窗体上的消息得到处理。(我是这么想的)