C# Winforms在Windows XP中运行时冻结

C# Winforms在Windows XP中运行时冻结,c#,.net,winforms,operating-system,C#,.net,Winforms,Operating System,我有一个winforms应用程序,其中使用了许多自定义控件,如按钮、面板和选项卡。面板将用于应用程序中的几乎所有布局。现在,我在面板的构造函数中添加了以下DoubleBuffer public partial class MainPanel : Panel { public MainPanel() { //ControlStyle is enum of system.windows.forms SetStyle(ControlStyles.User

我有一个winforms应用程序,其中使用了许多自定义控件,如按钮、面板和选项卡。面板将用于应用程序中的几乎所有布局。现在,我在面板的构造函数中添加了以下DoubleBuffer

public partial class MainPanel : Panel
{
    public MainPanel()
    {
        //ControlStyle is enum of system.windows.forms
        SetStyle(ControlStyles.UserPaint, true);
        SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        SetStyle(ControlStyles.DoubleBuffer, true);
        SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    }
}
在创建应用程序之后,我也遇到了很多闪烁的问题,例如,当我尝试运行应用程序时,由于“n”个面板,我的应用程序闪烁了很多。所以谷歌搜索了很多,发现了很少的解决方案,其中有一个适合我

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
    }
}
使用上面的代码减少了我的闪烁问题,但是它需要几分之一秒的时间来显示窗体。代码的逻辑是等待,直到所有的控件都被绘制出来,我完全可以使用延迟,这几乎不需要几微秒

我的应用程序可以在Windows 7所有版本、Windows 8、Windows 8.1上运行,但当涉及到Windows XPSP 2时,应用程序没有尝试其他版本,但经常挂起。但是,应用程序没有崩溃。但是XP中的应用程序冻结了很多。我使用的框架版本是.NET3.5,当应用程序安装NSIS时,我正在计算机上安装.NET3.5框架

我为x86编译的应用程序可以在任何位机上运行。据我所知,我已经涵盖了所有可能的事情。但我仍然面临着这个问题。有什么明显的东西我遗漏了吗

我的应用程序在XP方面有什么问题吗

PS:即使微软已经终止了对WindowsXP的支持,我仍然必须为XP用户启动应用程序


提前感谢

您尝试过在WinXP上调试吗?您是否尝试查看挂起时的进程转储?请在XP下分析您的应用程序,看看问题所在。我根据自己的经验了解在XP上合成WS_EX_的问题。我不记得是否有冻结或只是有缺陷的UI工件,但你一定要检查操作系统版本并禁用XP的标志。@Richard Windows XP机器是完全不同的机器。到目前为止,我还没有寻找进程转储。有时我的应用程序会运行,但我无法点击任何按钮。这很可能是由WS_EX_COMPOSITED引起的。更有可能是由于不适当地使用Control.Begin/Invoke调用对UI线程进行Firehose而导致的。这很容易冻结速度较慢的机器上的用户界面,这种机器安装了XP。