直到我抓住并移动窗口后,窗口才完全绘制

Wil*_*rck 5 c# paint winforms livecharts

我最近向 WinForm 添加了一些图表,并使用实时数据进行更新。我的表单加载喜欢这样:

private void MyForm_Load (object sender, EventArgs e){
...bunch of code
//Waveforms
InitializeChartEKG();
InitializeSpO2WaveformChart();
InitializeEtCO2WaveformChart();
FillWaveformCharts();
}
Run Code Online (Sandbox Code Playgroud)

实时图表的创建方式如下:

public async void FillWaveformCharts() {
     waveformData = AnesthWaveformDatas.CreateWaveformObjects(anestheticRecordNum);
     Action action = () =>
     FillChartEKG(waveformData);
     Invoke(action);
     action = () =>
     FillChartSpO2(waveformData);
     Invoke(action);
     action = () =>
     FillChartEtCO2(waveformData);
     Invoke(action3);
}
Run Code Online (Sandbox Code Playgroud)

然后,在每个 FillChart 方法中,我更新 UI,以便表单不会冻结:

public async void FillChartEKG (List<AnesthWaveformData> waveformData) {
 for (i = 0; i < waveformData.Count; i++){
   ...bunch of code that takes a long time to run...
  UpdateUI(); //updates UI to keep form from freezing

}
Run Code Online (Sandbox Code Playgroud)

最后,UpdateUI(),它更新 UI 以防止表单在图表中更新实时数据时冻结:

private void UpdateUI () {
   DispatcherFrame frame = new DispatcherFrame();
   Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, new 
   DispatcherOperationCallback(delegate (object parameter) {
     frame.Continue = false;
     return null;
   }), null);
   Dispatcher.PushFrame(frame);
}
Run Code Online (Sandbox Code Playgroud)

所以这一切都工作得很好 - 我的图表使用从右到左的实时数据流进行更新,并且表格根本不会冻结。唯一的问题是,3/4 的表单控件未在 Form_Load 上绘制。如果我抓住标题栏并移动窗口,控件将立即绘制。

我努力了:

this.Invalidate();
this.Update();
Run Code Online (Sandbox Code Playgroud)

和:

this.Refresh();
Run Code Online (Sandbox Code Playgroud)

在 FillWaveforms() 方法不起作用之后。

这是我在加载时看到的内容:

未上漆

如果我抓住标题栏并稍微移动窗口,效果如下:

绘

有任何想法吗?

Wil*_*rck 2

谢谢@Rekshino,就是这样。看来我偶然发现了一个 Windows 错误。

添加

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
        return cp;
    }
}
Run Code Online (Sandbox Code Playgroud)

按照您提供的链接到我的表格顶部解决了问题。谢谢。