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 提供了运行时和库,但是如果你想制作一个跨平台的程序,你还需要考虑你使用的 UI 库。

更新(2016 年):

我原来的答案可能是错误的。根据this page,对Windows Forms 2.0 的支持已经完成,但是可能还有一些bug,我没有尝试过。但是,如果您使用第三方 UI 库,例如 Infragistics,它们可能由于本机调用而无法工作。

查看此页面以获取有关移植 Winforms 应用程序的更多信息,包括可以提供帮助的工具 MoMA。

于 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 回答