单声道linux上为什么.net程序无法运行?

时间:2013-02-04 19:03:03

标签: linux mono delphi-prism oxygene

我在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

2 个答案:

答案 0 :(得分:2)

看起来您的程序正在使用Windows窗体。对Windows窗体的支持不是最好的单声道。 Mono提供了运行时和库,但是如果你想制作一个跨平台的程序,你需要考虑你使用的UI库。

更新(2016):

我原来的答案可能是错的。根据{{​​3}},对Windows Forms 2.0的支持已经完成,但可能仍有许多错误,我还没有尝试过。但是,如果您使用第三方UI库(例如Infragistics),则由于本机调用,它们可能无法正常工作。

有关移植Winforms应用的更多信息,请查看this page,包括可以提供帮助的MoMA工具。

答案 1 :(得分:0)

我遇到了同样的问题(.net,Linux,Mono)。 我的程序有一个provider-subsrciber模式。提供者在另一个线程上。 主要表单是订阅提供者。当它被解雇时:

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

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

..... 它来自另一个线程并完成它的工作。

另一位订阅者也在主表单上发起了一个事件。我忽略了这个事件并且问题已经消失了。