【发布时间】:2012-12-09 08:26:26
【问题描述】:
我在我的 WindowsForms 应用程序中使用 MS Chart,我希望在图表上显示许多不同的标记。原则上,它是通过为Series 或DataPoint 指定MarkerImage 来完成的。问题是MarkerImage 属性是字符串类型,no documentation 用于它的用法。根据 MS Chart 示例,它是图像文件的路径。
我设法通过将图像放入项目/图像文件夹,为它们指定“复制到输出目录”,然后在代码中使用series.MarkerImage = "images/image.bmp"; 来使其工作。它原则上可以工作,但在运行时,当第一次在图表上显示标记图像时,应用程序会冻结一段时间。我认为这是因为加载新文件的磁盘访问时间。每次新图像首次出现在屏幕上时都会发生这种情况,这使得应用程序在所有图像都被缓存之前真的没有响应。
我正在寻找一些解决方案来改善这一点。充其量我宁愿将所有图像存储为嵌入式资源,这比使用应用程序发送额外的图像文件夹要好得多。根据documentation 的LegendCell.Image(具有类似含义),该字符串实际上是一个URL。我发现可以使用Page.ClientScript.GetWebResourceUrl 获取 ASP.NET 应用程序中嵌入资源的 URL,但我的应用程序如果只是普通的 WindowsForms。是否可以在 windows 窗体中获取嵌入资源的某种 URL?
我已经在考虑实现我自己的 Series 或 DataPoint 后代来处理资源引用,但似乎不是正确的方法,因为我看不到与我可以覆盖的 Series 的实际渲染相关的任何内容...
我想到的另一个解决方案是自己在应用程序启动时预加载所有图像文件,但这似乎是一个 hack。如果我想将标记与单独的程序集 (.dll) 一起提供怎么办?
更新。我试过了:
- 使用 File.ReadAllBytes 预加载图像。不会加速任何事情。
- 使用Data URI。失败并出现异常文本“不支持给定路径的格式。”
【问题讨论】:
-
我仍在寻找解决方案。
标签: c# mschart microsoft-chart-controls