7

Motorola MC3100 (CE 6.0 バージョンのみ) で .NET CF 3.5 アプリケーションを終了すると、「アプリケーション xxx で重大なエラーが発生したため、シャットダウンする必要があります」というエラー メッセージが表示されます。次に、アプリケーションが再び機能するように、デバイスをウォーム ブートする必要があります。

このコードは、アプリケーションがシャットダウンされるまで正常に機能し、アプリケーションのコントロールにフォントが設定されている場合にのみ失敗します。.NET CF 2.0 や、私が .NET CF 3.5 で試したその他すべての Motorola、Intermec、Psion、HHC デバイスでも、すべて正常に動作します。

ここに私の現在のテストコードがあります:

[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);
}

関連すると思われるリンクをいくつか見ました。

しかし、これまでのところ、私が見つけた唯一の推奨事項は、アプリケーションでフォントを削除することです. この場合、リンクされたアセンブリを含め、フォントが設定されている場所が多すぎて不可能です。

他の誰かがこのようなものを見たことがありますか。これらのバージョンでは、コントロールがフォントを適切に破棄していないことに関係しているようです。

4

8 に答える 8

2

私はまったく同じ問題に直面しました。次のことを試しました(問題を解決したものはありません):

  • new Font()すべてのステートメントを削除します
  • Form.Close()の代わりに使用Application.Exit()
  • アプリケーション全体を .NET CF 3.5 に移行
  • SQLite の依存関係を削除しようとする

私たちのケースで最終的に機能した唯一の解決策(ただし、「きれいな」解決策ではありません)は、MainForm.Closed()

Process.GetCurrentProcess().Kill()
于 2013-09-06T21:08:58.690 に答える
1

MC3190 でまさにこの問題が発生しました。私が見つけた解決策は、アプリケーションで開かれたすべてのフォームを追跡することでした。各インスタンスをグローバル List に追加し、アプリケーションの終了時にリストをループして、リスト内の各項目で Form.Dispose を呼び出します。何ヶ月も私にストレスを与えてきました。

于 2013-11-30T14:53:53.200 に答える
0

私は同じ問題に遭遇しました.Wince6を搭載したMotorola MC3100は、スタンドアロンで実行しているときにアプリケーションの終了時にのみクラッシュし、VSデバッガーを接続して実行しているときにクラッシュしません. クラッシュしたとき、OS は HS であり、唯一の解決策はデバイスをコールドブートすることでした。

そして、私は次の解決策でそれに対処することができます。

私のアプリはモーダルサブフォームで Application.exit() を使用していましたが、フォントで使用される管理されていないリソースをうまく処理していないようです。

私の場合、正確な原因はメインフォームで new Font(...) を使用することでした。モーダルサブフォームで使用しても問題はありませんでした。

メイン フォームに application.exit() を戻すことも、明示的にフォント リソースを破棄することもできませんでした (この方法で多くの試行を行いました)。

最後に、私が見つけた唯一の解決策は、application.exit() を使用する代わりにメインフォームを閉じてアプリケーションを終了することでした。

于 2013-02-06T13:39:53.643 に答える
0

Application.Exit() は、アプリケーションを閉じるための推奨される方法ではありません。アプリケーションを閉じるには、開いているすべてのフォームを閉じます。

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

于 2013-03-28T11:44:32.340 に答える
0

フォームを作成し、コードを Application.Run() コンテキストで実行する必要があります。Run の最後に、多くのリソースが「魔法によって」破棄されます。それ以外の場合は、破棄する必要があるすべてのリソースを破棄する必要があります。

于 2014-08-29T14:10:56.600 に答える
0

この問題は、Windows CE 6.0 / .NET 3.5 CF を実行している Motorola MC3190 デバイスで発生しました。何ヶ月もの間、アプリケーションを閉じるときに断続的な致命的なエラー ダイアログが表示されていました。ThreadAbort 例外から、すべての単一リソースが適切に破棄されるようにするまで、考えられるすべてのオプションが調査されました。

通常、デバイスに特定のフォントがない場合、またはたまたま認識されないフォントにアクセスしようとしている場合、デフォルトで Arial になります。ただし、MC3190 では、フォントが認識されない場合、デバイスは致命的なエラー ダイアログを表示し、アプリケーションの終了後にフリーズします。これにより、ユーザーはウォーム ブート (場合によってはコールド ブート) を行う必要があります。

この問題に対する 2 つの解決策を考え出しました。

  1. アプリケーション全体のフォントをサポートされているものに設定します (Tahoma を Arial に置き換えます)
  2. サポートされているフォントでインスタンス化するか、null に設定して、グローバル Font オブジェクトをリセットします。
于 2013-12-06T18:57:50.353 に答える