【发布时间】:2014-09-03 16:26:27
【问题描述】:
问题
我遇到了一个问题,使用 json.net 反序列化任何值(甚至是虚拟值)似乎会弄乱我的 mschart 控件的 x 轴上的日期。这是一张应该在 x 轴上有日期值的图表:
===不好===
图表由以下最少代码生成:
using System.Windows.Forms.DataVisualization.Charting;
using System.Threading;
using Newtonsoft.Json;
public partial class Form1 : Form
{
Thread thread;
public Form1()
{
InitializeComponent();
chart1.Dock = DockStyle.Fill;
thread = new Thread(Plot);
thread.Start();
}
void Plot()
{
// prepare chart
chart1.Invoke((MethodInvoker)delegate
{
chart1.ChartAreas.Clear();
chart1.Series.Clear();
ChartArea area = new ChartArea();
chart1.ChartAreas.Add(area);
Series series = new Series("water level");
series.ChartArea = area.Name;
series.ChartType = SeriesChartType.Line;
chart1.Series.Add(series);
});
// plot line by adding 2 points: ((time)0, 0) and ((time)1, 1)
for (int i = 0; i < 2; i++)
{
object dummy = JsonConvert.DeserializeObject<object>("null");
chart1.Invoke((MethodInvoker)delegate
{
DateTime time = new DateTime(1970, 1, 1, 0, 0, i, DateTimeKind.Utc);
chart1.Series["water level"].Points.AddXY(time, i);
});
}
}
}
注释掉以下行的唯一 json.net 行会产生预期的结果:
object dummy = JsonConvert.DeserializeObject<object>("null");
===好===
问题
我的代码有问题吗?
更新
我只是用
替换了相关行Thread.Sleep(5000);
问题仍然存在。我想也许我过早地修改图表。但现在,我不知道该怎么做。
【问题讨论】:
-
我怀疑它在某种程度上破坏了你的文化。 json.net调用前后
CultureInfo.CurrentCulture的值是多少? -
前后都是“en-US”
-
我也可以重现这个。很奇怪。
-
哦。那挺好的”。那么这不是本地问题
-
我不认为这个问题是由 json.net 专门引起的。我只是用我自己的 json 解析器尝试过,同样的事情发生了
标签: c# multithreading json.net mschart