【问题标题】:DataVisualization.Charting.Chart PostPaint Event Firing PrematurelyDataVisualization.Charting.Chart PostPaint 事件过早触发
【发布时间】:2019-02-23 13:39:00
【问题描述】:

我正在绘制一个复杂的图表,并且 System.Windows.Forms.DataVisualization.Charting.Chart 的 PostPaint 事件似乎过早触发。屏幕上还没有图表。

有没有人对带有大图表的 PostPaint 事件的行为有更好的理解?有更好的活动来听吗?推荐策略?

我不确定发布代码会带来什么好处。

【问题讨论】:

  • 像任何其他 Paint 事件一样,它会在触发时(并且经常)触发。由您决定是否已经存在数据,如果数据不存在或未完全准备好,则中止。
  • 这不是问题,但我同意这总是需要注意的。我有一些代码可以检查是否发生了“真实”图表渲染。

标签: c# winforms data-visualization


【解决方案1】:

原帖: 所以事实证明这个问题的答案(无论如何对我来说)是从事件中创建另一个线程(我正在使用任务来做)。该线程的工作是不断地将区域与空图像进行比较,当它不再为空时,抓取图像并将其保存在数据库中。因为它是一个线程,所以这释放了图表以最终呈现自己。

最后的帖子: 最后,我不得不在 PostPaint 事件中加了一个锁(它会触发多次,正如 TaW 所指示的那样)并确保里面的代码只会执行一次(我有一个 Draw 按钮,所以这些控件每次都会重置点击它的时间)。此外,我有必要创建一个任务来实际完成捕获图像并将其存储在数据库中的工作。如果我不这样做,我每次都会得到一个空白图像。我实际上不必检查点数或对图像进行采样以查看它是否为空白。

锁定事件并在事件中创建任务是不同之处。

【讨论】:

  • 我不确定这是否可靠或有效。
  • 到目前为止,我是一对一的,所以时间会证明一切。关于效率,我不太在意,但如果您有其他想法,请随时分享。
  • 好吧,我的想法是按照我的描述进行测试,例如if (chart1.Series[0].Points.Count <= 0) return; 等...但是对细节一无所知,尤其是代码的动态,很难给出更具体的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2014-05-03
相关资源
最近更新 更多