CE 6.0 / .NET CF 3.5 Приложение столкнулось с серьезной ошибкой (MC3100)

При выходе из приложения .NET CF 3.5 на Motorola MC3100 (только в версии CE 6.0) я получаю сообщение об ошибке «Приложение xxx обнаружило серьезную ошибку и требует завершения». Затем мне нужно перезагрузить устройство, чтобы приложение снова заработало.

Этот код работает нормально до тех пор, пока приложение не будет закрыто, и он не будет работать, только если на элементе управления в приложении установлен шрифт. Все также отлично работает на .NET CF 2.0 и на всех других устройствах Motorola, Intermec, Psion, HHC, которые я пробовал с .NET CF 3.5.

Вот мой текущий тестовый код:

[MTAThread]
static void Main()
{
  Control oCtrl = new Control();
  oCtrl.Font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold);

  // Setting the controls font to null works
  // oCtrl.Font = null;  Works

  // Setting the Control to null does not work, still get error
  // oCtrl = null;       Doesn't work

  // Setting a font, not on a control, also works fine.
  // System.Drawing.Font font = new System.Drawing.Font("Tahoma", 10F, System.Drawing.FontStyle.Bold);
}

Я видел несколько ссылок, которые кажутся связанными:

Application crashes on exit when using Button2 Problem with CF 3.5 and Windows CE 6 Error on close

Но пока единственная рекомендация, которую я нашел, - исключить шрифты в приложении. В этом случае слишком много мест, где установлены шрифты, включая связанные сборки, что было бы невозможно.

Кто-нибудь еще видел что-нибудь подобное? Похоже, что-то, что связано с элементами управления, неправильно распределяющими шрифты в этих версиях.

 tcarvin25 мая 2012 г., 20:37
Я предполагаю, что если вы переместите этот код в простую форму, которая была запущена через Application.Run, у вас все еще есть эта проблема?
 Louis Haußknecht25 мар. 2013 г., 21:34
После нескольких часов отладки я теперь в той же точке. Вы нашли решение своей проблемы?
 skeeve01 авг. 2012 г., 17:02
Да, это так. Я начал с нашего полного приложения и урезал код до тех пор, пока не изолировал проблему от этих двух строк.
 skeeve01 апр. 2013 г., 16:21
Пока что мое лучшее решение - вернуться к CF 2.0.

Ответы на вопрос(8)

Application.Exit () - не рекомендуемый способ закрытия приложений. Закройте все открытые формы, чтобы закрыть приложение.

http://blogs.msdn.com/b/tom_krueger/archive/2005/02/24/379678.aspx

 15 авг. 2013 г., 16:40
Обратите внимание, что сообщение в блоге, которое вы цитируете,way устарели.

У меня была именно эта проблема с MC3190. Решение, которое я нашел, состояло в том, чтобы отслеживать все формы, которые были открыты в приложении, добавляя каждый экземпляр в глобальный Список и после завершения цикла приложения через список, и вызывать Form.Dispose для каждого элемента в списке. Подчеркнул меня в течение нескольких месяцев.

Мы столкнулись с той же проблемой и решили эту строку кода в MainForm.Closed ()

Process.GetCurrentProcess().Kill()

Я столкнулся с той же проблемой: Motorola MC3100, с wince6, только сбой при выходе из приложения при автономной работе, и без сбоев при работе с подключенным отладчиком VS. в случае сбоя ОС работала в режиме HS, и единственным выходом была холодная перезагрузка устройства.

И мне удается справиться с этим следующим решением.

Мое приложение использовало Application.exit () в модальной вложенной форме, и, похоже, оно не очень хорошо справляется с некоторыми неуправляемыми ресурсами, используемыми шрифтом.

в моем случае точной причиной было использование нового шрифта (...) в моей основной форме. использование его в модальной подчиненной форме не вызывало каких-либо проблем.

Возвращение application.exit () в основной форме не работало и не требовало явного извлечения ресурсов шрифта (я сделал много попыток, ориентированных таким образом).

В конце концов, единственное решение, которое я нахожу работающим, - это выйти из приложения, закрыв mainform вместо использования application.exit (), и это работает хорошо.

Мы столкнулись с этой проблемой на устройствах Motorola MC3190 под управлением Windows CE 6.0 / .NET 3.5 CF. В течение нескольких месяцев при закрытии нашего приложения мы сталкивались с периодически возникающей фатальной ошибкой. Все возможные варианты были изучены из исключений ThreadAbort, чтобы убедиться, что каждый отдельный ресурс был правильно расположен.

Обычно, если устройство не имеет определенного шрифта или пытается получить доступ к тому, который оказывается нераспознанным, по умолчанию используется Arial. Однако при использовании MC3190, если шрифт не распознается, устройство отображает диалоговое окно с неустранимой ошибкой и останавливается после выхода из приложения. Это приводит к тому, что пользователю приходится греть загрузку (иногда холодную загрузку).

Мы придумалиtwo solutions к этой проблеме:

Set the application-wide font to something that is supported (replace Tahoma with Arial) Reset any global Font objects either by instantiating with a supported font OR setting to null.
Решение Вопроса

Я столкнулся с точно такой же проблемой. Пробовал следующее (никто не решил проблему):

Remove all the new Font() statements Use Form.Close() instead of Application.Exit() Move the whole application to .NET CF 3.5 Attempt to remove SQLite dependencies

Единственное решение, которое в конечном итоге сработало для нашего случая (однако это не «симпатичное» решение), это следующая команда вMainForm.Closed()

Process.GetCurrentProcess().Kill()

Вы должны создать форму и запустить свой код в контексте Application.Run (). В конце выполнения многие ресурсы удаляются «по волшебству». В противном случае вы должны распоряжаться всеми ресурсами, которые необходимо утилизировать.

У меня была такая же проблема на Motorola 9190-G с использованием .NET Compact Framework 3.5. Время от времени мне приходилось загружать устройство, потому что оно зависало после закрытия приложения.

Я смог обойти проблему, указав шрифт формыListView содержался вConstructor быть Arial, 10pt, Regular. Затем я программно устанавливаю нужный шрифт. Например,myListView.Font = new System.Drawing.Font("Tahoma", 11F, System.Drawing.FontStyle.Bold);.

Если бы я установил шрифт в любую другую комбинацию шрифт / стиль шрифта / размер, я получил бы сообщение о том, что программа столкнулась с серьезной проблемой и должна была завершить работу & quot; сообщение об ошибке при закрытии приложения на мобильном устройстве.

Ваш ответ на вопрос