C windows forms ошибка

Обновлено: 07.07.2024

вы запустили Process Explorer или Диспетчер задач Windows, чтобы посмотреть на объекты GDI, дескрипторы, потоки и пользовательские объекты? Если нет, выберите эти столбцы для просмотра (Диспетчер задач выберите вид->выбрать столбцы. Затем запустите приложение и посмотрите на эти столбцы для этого приложения и посмотрите, действительно ли один из них растет.

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

здесь ссылка об этом, что может быть полезным.

Удачи!

эта проблема почти всегда связана с количеством объектов GDI, количеством объектов пользователя или количеством дескрипторов и обычно не из-за состояния нехватки памяти на вашем компьютере.

когда я отслеживаю одну из этих ошибок, я открываю ProcessExplorer и наблюдаю за этими столбцами: дескрипторы, потоки, объекты GDI, объекты пользователя, частные байты, виртуальный размер и рабочий набор.

(по моему опыту, проблема обычно заключается в утечке объекта из-за обработчика событий, удерживающего объект и предотвращение его утилизации.)

Я думаю, что это обычно связано с компьютером, у которого заканчивается память, поэтому он не может создавать больше оконных ручек. Обычно Windows начинает показывать какое-то странное поведение в этот момент.

Я добавил чек, который заставляет его работать.

это всегда так, но форма выдает ошибку без нее. Кстати, моя ручка составляет около 4,9 миллиона

Я получил ту же ошибку в моем приложении.Я загружаю много элементов управления в одном page.In нажмите кнопку событие я очищаю элементы управления.очистка элементов управления не освобождает элементы управления от memory.So утилизируйте элементы управления из памяти. Я только что прокомментировал управление.очистите метод() и включите несколько строк кода для удаления элементов управления. Что-то вроде этого

для каждого ЦТЛ в качестве контроля в экземпляре коллекции controlcollection

ctl.dispose ()

далее

предложение из памяти не кажется плохим руководством.

что ваша программа делает, что она получает эту ошибку?

Это создает очень много окон или элементов управления? Создает ли он их программно, а не во время разработки? Если да, то вы делаете это в цикле? Это бесконечный цикл? Вы потребляете ошеломляющие лодки памяти каким-то другим способом?

Что происходит, когда вы смотрите памяти, используемой приложением в диспетчере задач? Делает он взлетел на Луну? Или еще лучше, как было предложено выше, используйте process monitor, чтобы погрузиться в детали.

Flexberry Platform в сборке ICSSoft.STORMNET.UI.dll содержит классы для обработки исключительных ситуаций.

Простое отображение ошибки

Стандартный сценарий отображения Exception в специальной форме выглядит так:

Способы сбора информации об исключениях

Иногда, чтобы понять что случилось в системе, недостаточно знать номер строки в исходном коде. Для таких случаев есть возможность сделать ряд снимков экрана, добавить дополнительную информацию об ошибках и передать это всё на форму отображения ошибки. Однако, вся эта информация не будет использована, пока пользователь не выгрузит её с помощью какого-либо провайдера отчётов об ошибках.

Итак, чтобы получить снимки экрана:

Провайдеры отчётов об ошибках

Пользователь имеет возможность выгрузить информацию об ошибке, нажав на соответствующую кнопку на форме ошибки. По-умолчанию доступны 3 провайдера отчётов об ошибках:

Первые 2 варианта поддерживают сохранение изображений экрана (вся информация помещается в один zip-файл). В буфер обмена попадает только текстовая информация.

Чтобы добавить свой провайдер отчёта об ошибке, нужно унаследоваться от интерфейса IBugReportProvider и в конфигурационном файле добавить настройку BugReportProviders , в которой указать полные имена типов провайдеров, разделённые вертикальной чертой.

Важно: нельзя подключить 2 провайдера с одинаковым MenuItemName (будет подключен только первый из них).

Для работы с данными ошибки можно использовать статические методы класса ErrorBox .

Форма исключения

Пример:

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

Адрес: пробел (пустую строку MAPI не принимает).

Замечание:

Добавление информации о прикладной системе

Класс ICSSoft.STORMNET.Windows.Forms.ErrorBox содержит статический делегат, который позволяет собрать информацию о системе для того, чтобы она попала в информацию об ошибке.

Обработка неотловленных исключений в прикладных системах

Чтобы пользователям не показывалась “страшная” форма с информацией об ошибке, если случилось неотловленное исключение, нужно подписаться на события Application.ThreadException и System.AppDomain.CurrentDomain.UnhandledException для того чтобы обработать их правильным образом.

Генератор приложений Flexberry добавляет строки

в метод Main приложения (в скобках программиста). Обработчики ICSSoft.STORMNET.Windows.Forms.ErrorBox.ApplicationThreadException и ICSSoft.STORMNET.Windows.Forms.ErrorBox.CurrentDomainUnhandledException просто запускают стандартную ErrorForm с информацией об исключении. Если требуется особая логика, то можно использовать собственный обработчик события.

Подключение лога ошибок

Чтобы включить лог ошибок достаточно указать такой атрибут в файле конфигурации:

План этой статьи:

  • Создание службы
  • Event Viewer
  • Код службы
  • Проверка работы службы(Запуск службы вручную)
  • Отображение WinForm

Создание службы

Дальше нужно создать установщик. В открывшемся окне щелкаем ПКМ и выбираем «Add Installer». У вас создастся «ProjectInstaller.cs[Design]» после чего нужно будет перейти к коду «F7» или ПКМ «View Code». Нужно найти строку «InitializeComponent();», поставить на нее курсор и нажать «F12», дальше нужно добавить следующие строки:


Но добавлять эти строки нужно только в следующей последовательности и месте. Иначе будет ошибка при установке сервиса.




Event Viewer

Это нужно для проверки правильной работы нашей программы.

Event Viewer — программа для просмотра журнала событий которая есть на каждом компьютере с windows. Каждая программа, которая запускается на компьютере, публикует уведомление в журнале событий до того, как останавливается. Любой доступ к системе, изменение безопасности, подстройка операционной системы, аппаратный сбой и сбой драйвера — все это попадает в журнал событий. Event Viewer сканирует файлы текстового журнала, объединяет их и помещает в интерфейс.

Как его открыть? — Пуск → Event Viewer(в поиске) → «Просмотр журналов событий».

Дальше «Настраиваемые представления (Custom Views)» → «События управления (Administrative Events)». Тут мы можем увидеть все ошибки, предупреждения и информацию о них.

Есть 3 типа журнала: приложение(Application), системные(System) и безопасность(Security). Нам нужен только системный(System).

Код службы

Находим файл .cs с названием службы, у меня это «Service1.cs», открываем. В файле должно быть заготовлено 2 переопределенных метода:

  • OnStart(string[] args) — выполняется при запуске службы,
  • OnStop() — выполняется при остановке службы.

Данные которые мы получаем будем хранить в обновляемом текстовом файле, поэтому добавляем


Добавляем код в метод OnStart(string[] args):


Дальше нужно собрать решение «Solution» -> «Rebuild Solution». После успешной сборки можно проверять работу.

Проверка работы службы(Запуск службы вручную)

Службу windows нельзя запускать как обычное приложение. Можно запустить только через командную строку от имени администратора.

Запускаем командную строку от имени администратора. Ввести следующие команды:


Дальше нажимаем клавишу Win+R. Вводим «Services.msc». Находим в списке свой сервис, нажимаем на него, и нажимаем «Запустить(Start)». После успешного запуска сформируется файл по указанному в коде пути в котором будет находиться список системных ошибок.
Не забываем удалить службу после проверки.

Отображение WinForm

Для отображения в консоли если постараться то можно найти статьи, но для отображения в WinForm я так и не нашла, так что вот. По умолчанию проект службы создается типа «Application». Для отображения через консоль этот параметр в настройках нужно поменять, для WinForm оставить как есть. Дальше нужно добавить форму в проект. «WindowsService1» → ПКМ → Add → Windows Form → Add. И делаем примерно следующий дизайн. Дальше меняем файл «Program.cs».


И меняем метод Main:


Добавляем новый класс «SystemError». («WindowsService1» -> ПКМ -> Add -> Class -> Add). Тут мы будем хранить данные об ошибках. Меняем его:


Дальше в «Service1.cs» добавляем метод «RunFromForm(string[] args)» который запускает службу.


Добавляем новый класс «GetListErrors». («WindowsService1» -> ПКМ -> Add -> Class -> Add). Тут мы будем доставать данные из файла. Добавляем using:


Дальше меняем код формы «Form1.cs». Добавляем using:


Теперь можно запускать службу как обычное приложение. Выглядит результат следующим образом:

Forms не существует в пространстве имен system.windows.

Также я получаю некоторую ошибку, связанную с неопределенными функциями для senddown и sendup , которые, как мне кажется, находятся в пространстве имен Forms .

Разверните проект в дереве решений, щелкните правой кнопкой мыши на References , Add Reference , выберите System.Windows.Forms на вкладке Framework .

Иногда вам нужно добавить ссылку на некоторые нестандартные сборки.

Из комментариев : для людей, которые ищут VS 2019+: теперь ссылки на проекты добавляются с помощью щелчка правой кнопкой мыши по Dependencies в Solution Explorer .

browxy.com

Вы можете столкнуться с этой проблемой, если у вас есть несколько проектов внутри решения, и один из них физически находится внутри папки решения. Я решил это, щелкнув правой кнопкой мыши по этой папке в дереве решений -> затем нажав «исключить из проекта».

exclude folder

API рабочего стола Windows (включая Windows Forms, WPF и WinRT) будут доступны только при ориентации на net5.0-windows . Вы можете указать версию операционной системы, например net5.0-windows7 или net5.0-windows10.0.17763.0 (для Windows October 2018 Update). Вам необходимо настроить таргетинг на версию Windows 10, если вы хотите использовать API WinRT.

В вашем проекте:

Ошибка CS0234 Тип или имя пространства имен Forms не существует в пространстве имен System.Windows (отсутствует ссылка на сборку?)

Если вы используете файл проекта в стиле Sdk (что рекомендуется), ваш файл * .csproj должен быть похож на этот:

Обратите особое внимание на эти строки:

Обратите внимание, что если вы используете WPF при обращении к некоторым библиотекам WinForms, вам также следует добавить <UseWPF>true</UseWPF> .

Читайте также: