C# 事件队列在winforms中工作不正常

C# 事件队列在winforms中工作不正常,c#,.net,winforms,multithreading,showdialog,C#,.net,Winforms,Multithreading,Showdialog,假设一个主窗体a和一个模态对话框B 我使用invoke作为模式对话框从线程启动B。对话框正确显示,并使用ShowDialogparent启动,其中父级为表单A 当我关闭B时,主对话框A没有正确响应某些事件,例如鼠标单击。本期仅在以下情况下转载: 代码是使用.NETFramework 1.1概要文件编译的 该代码在Windows 7 x64计算机上执行 关闭对话框后,会出现以下症状: 表单A不响应某些鼠标单击,但响应鼠标移动在鼠标移动时突出显示按钮。 主窗口关闭按钮在鼠标悬停时高亮显示,也可以单击

假设一个主窗体a和一个模态对话框B

我使用invoke作为模式对话框从线程启动B。对话框正确显示,并使用ShowDialogparent启动,其中父级为表单A

当我关闭B时,主对话框A没有正确响应某些事件,例如鼠标单击。本期仅在以下情况下转载:

代码是使用.NETFramework 1.1概要文件编译的 该代码在Windows 7 x64计算机上执行 关闭对话框后,会出现以下症状:

表单A不响应某些鼠标单击,但响应鼠标移动在鼠标移动时突出显示按钮。 主窗口关闭按钮在鼠标悬停时高亮显示,也可以单击,但窗体未关闭。 新的模态对话框不再是模态对话框。 属性为StartPosition=CenterParent的对话框不居中,它们显示在屏幕的左上角。 我无法在其他机器上重现这个问题。此外,如果我使用.NET2.0或更高版本编译代码,则不会重现该问题

有什么解决这个问题的建议吗?我的申请需要1.1。我可以执行任何调用来恢复事件队列吗


提前感谢。

好的,最后是线程问题。我在线程外更改了调用代码,结果成功了

这很烦人,因为有时我们需要从线程显示此对话框,但在.NET 1.1和x64机器的情况下,调用和多线程似乎有一些问题


在任何情况下,如果代码是用.NET 2.0或更高版本编译的,因此在真正的x64中工作,那么问题就不存在了。

好,最后是线程问题。我在线程外更改了调用代码,结果成功了

这很烦人,因为有时我们需要从线程显示此对话框,但在.NET 1.1和x64机器的情况下,调用和多线程似乎有一些问题


在任何情况下,如果代码是用.NET 2.0或更高版本编译的,因此在真正的x64中工作,那么问题就消失了。

如果它不工作,您是否检查了dialog是否释放了操作系统的内存,原因可能是它仍然存在,并且仍然从用户那里吸取鼠标事件。它像线程问题一样嘎嘎作响。不够清楚,无法指出问题。@Tigran:对不起,我无法理解你的问题。你能再解释一下你的问题吗?谢谢你的帮助。我的意思是,可能是由于某种原因,对话框仍然是活动的,所以鼠标事件泵送被他作为模态接收,而不是通过父窗体接收。你有没有检查过,万一出错,对话框是否真的破坏了自己?@Tigran:我会再检查一遍,但恐怕不是这样,因为有些事件是有效的,比如鼠标移动,而其他的则是鼠标移动时按钮会亮显。。。无论如何,如果它不工作,您是否检查过dialog是否释放了操作系统的内存,因为它可能仍然存在,并且仍然从用户那里吸取鼠标事件。它像线程问题一样嘎嘎作响。不够清楚,无法指出问题。@Tigran:对不起,我无法理解你的问题。你能再解释一下你的问题吗?谢谢你的帮助。我的意思是,可能是由于某种原因,对话框仍然是活动的,所以鼠标事件泵送被他作为模态接收,而不是通过父窗体接收。你有没有检查过,万一出错,对话框是否真的破坏了自己?@Tigran:我会再检查一遍,但恐怕不是这样,因为有些事件是有效的,比如鼠标移动,而其他的则是鼠标移动时按钮会亮显。。。无论如何谢谢你