Я использую MS Chart в своем приложении WindowsForms и хочу, чтобы на диаграмме было видно много разных маркеров. В принципе это делается путем указания MarkerImage
вместо Series
или DataPoint
. Проблема в том, что свойство MarkerImage
имеет строковый тип с нет документации для его использования. Согласно образцам MS Chart, это путь к файлу изображения.
Мне удалось заставить его работать, поместив изображения в папку проекта/изображений, указав для них «Копировать в выходной каталог», а затем используя series.MarkerImage = "images/image.bmp";
в коде. В принципе это работает, но во время выполнения, когда дело доходит до первого отображения изображения маркера на графике, приложение на некоторое время зависает. Я предполагаю, что это из-за времени доступа к диску для загрузки нового файла. И это происходит каждый раз, когда на экране должно появиться новое изображение, что делает приложение действительно невосприимчивым, пока все изображения не будут кэшированы.
Я ищу какое-то решение, чтобы улучшить это. В лучшем случае я бы предпочел, чтобы все изображения хранились как встроенные ресурсы, что намного лучше, чем отправлять дополнительную папку с изображениями вместе с приложением. Согласно документация для LegendCell.Image
(которые имеют аналогичное значение) строка на самом деле является URL-адресом. Я обнаружил, что можно получить URL-адрес для встроенного ресурса в приложениях ASP.NET, используя Page.ClientScript.GetWebResourceUrl
, но мое приложение, если это просто WindowsForms. Можно ли получить какой-то URL-адрес встроенного ресурса в формах Windows?
Я уже думаю о реализации своих собственных потомков Series или DataPoint для обработки ссылок на ресурсы, но это не кажется правильным способом, поскольку я не вижу ничего, связанного с фактическим рендерингом Series, который я могу переопределить...
Другое решение, о котором я думаю, - это просто предварительно загрузить все файлы изображений при запуске приложения, но это похоже на взлом. А что, если я хочу предоставить маркеры вместе с отдельной сборкой (.dll)?
Обновить. Я пробовал:
- Предварительная загрузка изображений с помощью File.ReadAllBytes. Ничего не ускоряет.
- Использование URI данных. Сбой с исключением с текстом «Формат данного пути не поддерживается».