我在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
答案 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
{
..... 它来自另一个线程并完成它的工作。
另一位订阅者也在主表单上发起了一个事件。我忽略了这个事件并且问题已经消失了。