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() 方法不起作用之后。
这是我在加载时看到的内容:
如果我抓住标题栏并稍微移动窗口,效果如下:
有任何想法吗?
谢谢@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)
按照您提供的链接到我的表格顶部解决了问题。谢谢。
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |