C#图表轴标签格式不正确
假设我们有一个访问远程数据库的方法调用,大约需要1秒的时间来完成并返回一个C#图表轴标签格式不正确,c#,winforms,asynchronous,charts,async-await,C#,Winforms,Asynchronous,Charts,Async Await,假设我们有一个访问远程数据库的方法调用,大约需要1秒的时间来完成并返回一个DataTable(模拟如下): 这个代码显示了不正确的,未格式化的X轴标签 async void MainForm_Load(object sender, EventArgs e) { var data = await Task.Run(() => GetData()); chart.DataSource = data; chart.DataBind(); } 请注意,删除Thread
DataTable
(模拟如下):
这个代码显示了不正确的,未格式化的X轴标签
async void MainForm_Load(object sender, EventArgs e)
{
var data = await Task.Run(() => GetData());
chart.DataSource = data;
chart.DataBind();
}
请注意,删除
Thread.Sleep()
调用也可以解决此问题,即使使用第二个版本也是如此。答案在chart.Series[0].XValueType
首先,有两种说法:
XValueType
是Auto
,如果未明确指定,则解析为Paint
事件之前的某个特定类型
这不是显而易见的,我是通过反编译源代码发现的;如果你真的想关注我的研究,这里有一些里程碑式的进展:
构造函数:图表
this.\u dataManager.Initialize()代码>
:DataManager.初始化
chartImage.BeforePaint+=ChartPicture\u BeforePaint
DataManager.ChartPicture\u绘制前
DataManager.PrepareData
=>Series.PrepareData
if(this.\uxvaluetype==ChartValueType.Auto){ 这是.\u xValueType=ChartValueType.Double;
数据绑定
将尝试根据数据源
将自动
解析为特定类型。如果它不是自动
,它将不尊重数据源
中的数据类型表单加载
同步执行;当您在图表上调用DataBind
时,它对XValueType
具有自动
,并根据提供的数据源
解析为DateTime
Paint
事件在您初始化DataSource
之前发生,它将XValueType
解析为Double
。在绑定DataSource之后,它使用DateTime
的浮点表示- 在
表单\u Load
- 在数据绑定之前删除系列并添加新系列
- 在数据绑定之前明确指定值类型
async void MainForm_Load(object sender, EventArgs e)
{
var data = GetData();
chart.DataSource = data;
chart.DataBind();
}
async void MainForm_Load(object sender, EventArgs e)
{
var data = await Task.Run(() => GetData());
chart.DataSource = data;
chart.DataBind();
}