2

Mono の下の Linux で Delphi-prism (.NET) プログラムを実行しました。しばらく実行すると、端末に次のエラー メッセージが表示されてクラッシュしました。しかし、同じプログラムが Windows 7 でも問題なく動作します。

誰でも理由を教えてもらえますか?

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object
  at System.Windows.Forms.XEventQueue+PaintQueue.Dequeue () [0x00000] in <filename unknown>:0
  at System.Windows.Forms.XplatUIX11.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, IntPtr handle, Int32 wFilterMin, Int32 wFilterMax) [0x00000] in <filename unknown>:0
  at System.Windows.Forms.XplatUI.GetMessage (System.Object queue_id, System.Windows.Forms.MSG& msg, IntPtr hWnd, Int32 wFilterMin, Int32 wFilterMax) [0x00000] in <filename unknown>:0
  at System.Windows.Forms.Application.RunLoop (Boolean Modal, System.Windows.Forms.ApplicationContext context) [0x00000] in <filename unknown>:0
  at System.Windows.Forms.Application.Run (System.Windows.Forms.ApplicationContext context) [0x00000] in <filename unknown>:0
  at System.Windows.Forms.Application.Run (System.Windows.Forms.Form mainForm) [0x00000] in <filename unknown>:0
  at Millennia.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
4

2 に答える 2

2

プログラムが Windows フォームを使用しているようです。Windows フォームのサポートは、mono では最適ではありません。Mono はランタイムとライブラリを提供しますが、クロスプラットフォーム プログラムを作成する場合は、使用する UI ライブラリも考慮する必要があります。

更新 (2016):

私の最初の答えはおそらく間違っています。このページによると、Windows Forms 2.0 のサポートは完了していますが、まだ多くのバグがある可能性があるため、試していません。ただし、Infragistics などのサードパーティの UI ライブラリを使用する場合、ネイティブ コールが原因で機能しない可能性があります。

役立つツール MoMA を含む、Winforms アプリの移植に関する詳細については、このページをご覧ください。

于 2013-02-07T10:04:09.310 に答える
0

私は同じ問題を抱えていました(.net、Linux、Mono)。私のプログラムにはプロバイダーとサブスクライバーのパターンがあります。プロバイダーは別のスレッドにあります。メイン フォームはプロバイダーにサブスクライブされます。発射されると:

    private void RefreshLabels(ParameterMap pm)
    {
        string StateValueKey = string.Empty;
        string svkValue = string.Empty;

        if (InvokeRequired)
        {
            BeginInvoke(new RefreshItemsDelegate(RefreshLabels), new object[] { pm });
        }
        else
        {

..... それは他のスレッドから出くわし、その仕事をします。

別のサブスクライバーも、メイン フォームでイベントを発生させました。私はこのイベントを無視し、問題は解消されました。

于 2013-11-11T15:50:52.630 に答える