Проблема "Красного Креста" на MenuStrip и ToolStrip - PullRequest
4 голосов
/ 16 июня 2009

У меня есть часть программного обеспечения, которая отлично работала на многих машинах, хотя на одной машине иногда возникает проблема, и MenuStrip и ToolStrip отображаются в виде пустого белого фона с красным крестиком на нем, как пользовательский элемент управления будет, если вы создали нулевой объект. Этого не происходит во время отладки, и я не знаю, как заставить проблему повториться, но это происходит. Мне было интересно, если бы кто-нибудь знал, в чем может быть проблема?

Будет ли это версия .NET Framework?

Спасибо

Ответы [ 5 ]

3 голосов
/ 16 июня 2009

Это обычное явление, когда есть проблема GDI + («Красный X Смерти»). Вы делаете какой-либо нестандартный рисунок в OnPaint? Или, возможно, существует графический ресурс или глиф, который поврежден или неправильно утилизируется.

Редактировать: Я перечитал ваш вопрос. Кажется, у вас есть это только на одной из машин. Я немного погуглил по этому поводу и наткнулся на эту старую ветку . Пост внизу предполагает, что может быть проблема с отключенной виртуальной памятью:

Нам удалось это решить - мы были видя проблему на работающем устройстве ХР встраивается. Разработчик изображений XPe отключил виртуальную память и как как только мы обратились к проблеме ушел. Я считаю, что это просто Симптом исчерпания системы память для отображения графики (возможно особенно если вы используете много двойная буферизация)

Надеюсь, это поможет.

2 голосов
/ 16 июня 2009

Звучит как признак исключения из памяти для меня.

Edit: Который иногда может привести к System.InvalidOperationException: BufferedGraphicsContext

1 голос
/ 04 марта 2014

Наблюдение за этим происходит только на одном компьютере из 1000 с нашими продуктами. На этом компьютере я вижу, что программа .NET 3.5 иногда показывает красный X на своей сетке данных. И еще одна гораздо более простая программа .NET 2.0 получила красный крестик в меню menu. У меня есть только исходный код для более простой программы, но я могу сказать, что нет никакого пользовательского кода вообще, который влияет на этот компонент. Никаких кросс-нить, потому что ничего не обновляет. Его содержимое задается во время разработки с добавлением одного элемента при загрузке программы. Ошибка Red X произошла значительно позже загрузки программы.

Я был очень удивлен, увидев проблему в двух разных средах и в одной программе, в которой нет привязок данных. Я очень надеюсь, что на компьютере отключена виртуальная память.

Если это не так, то приветствуются любые рекомендации по системным частям, которые являются общими для .NET 2.0 и .NET 3.5.

Обновление: пользователь с проблемой удалил компьютер и заменил его (что решило проблему)

1 голос
/ 16 июня 2009

Определенно звучит как проблема с несколькими нитями.

Убедитесь, что вы используете Invoke при доступе к элементам управления и / или событиям запуска из потока, который не является основным потоком пользовательского интерфейса.

1 голос
/ 16 июня 2009

Вы пытаетесь обновить элементы управления GUI из потока, отличного от потока GUI? Объедините операцию перекрестного потока с обработчиком исключений, который поглотил все, и у нас было приложение, которое вы описали (на элементе управления сеткой, а не на панели меню) в приложении, которое я поддерживал.

...