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