C# 设置后进度条颜色不更新

C# 设置后进度条颜色不更新,c#,winforms,pinvoke,C#,Winforms,Pinvoke,我一直在尝试设置标准WinForms进度条的颜色,但也保留了Vista+主题(和动画) 我遇到过这样的情况: private static uint PBM_SETSTATE = 0x410; public enum State { Normal = 1, Error = 2, Warning = 3 }; [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] static extern

我一直在尝试设置标准WinForms进度条的颜色,但也保留了Vista+主题(和动画)

我遇到过这样的情况:

private static uint PBM_SETSTATE = 0x410;
public enum State { Normal = 1, Error = 2, Warning = 3 };

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, uint uMsg, IntPtr wParam, IntPtr lParam);
    public static void SetState(ProgressBar progressBar, int nState)
    {
        SendMessage(progressBar.Handle, PBM_SETSTATE, (IntPtr)nState, IntPtr.Zero);
    }
这似乎是可行的,但并非始终如一。有时进度条似乎没有改变颜色,但当窗口稍微调整大小或移离屏幕并返回时,它会改变颜色

为了给这个问题增加一点背景知识,我有一个任务正在执行一个长时间运行的进程,我正在通过同步上下文发送进度条更新

m_oSynchronizationContext.Send(o => { oAction(); }, null);
我认为这是一个刷新问题,我尝试在进度条上调用refresh(),但没有任何区别


有什么想法吗?

我会尽力帮忙,但由于不得不查找魔法常数,我被耽搁了。MCVE也会有帮助。非网站链接不好。请制作一个真正的mcve并在这里发布。我会尽力帮助您,但由于不得不查找魔法常数而被耽搁了。MCVE也会有帮助。非网站链接不好。请制作一个真正的mcve并在这里发布。