Winforms Show()导致Mac上的Mono崩溃
我使用Mono3.12.1将WinForms应用程序移植到MacOSX10.10.2。主窗开得很好。但是,当我尝试从工作线程显示带有System.Windows.Forms.MessageBox.show(“Hello”)的消息框时,该消息框将短暂显示,然后程序崩溃: mono(20661,0xa0f5e1d4)malloc:*对象0x7a6d86e0的错误:未分配要释放的指针 *在malloc\u error\u break中设置断点以进行调试 堆栈跟踪: 在 at(包装器管理为本机)System.Windows.Forms.XplatUICarbon.ReceiveNextEvent(uint、intptr、double、bool、intptr&) 在System.Windows.Forms.XplatUICarbon.GetMessage(object,System.Windows.Forms.MSG&,intptr,int,int) 在System.Windows.Forms.XplatUI.GetMessage(对象,System.Windows.Forms.MSG&,intptr,int,int) 位于System.Windows.Forms.Application.RunLoop(bool,System.Windows.Forms.ApplicationContext) 位于System.Windows.Forms.Application.Run(System.Windows.Forms.ApplicationContext) 位于System.Windows.Forms.Application.Run(System.Windows.Forms.Form) 在revelarpcommx.Program.Main()上 at(包装器运行时调用)object.runtime\u invoke\u void(object,intptr,intptr,intptr)Winforms Show()导致Mac上的Mono崩溃,winforms,macos,mono,osx-yosemite,Winforms,Macos,Mono,Osx Yosemite,我使用Mono3.12.1将WinForms应用程序移植到MacOSX10.10.2。主窗开得很好。但是,当我尝试从工作线程显示带有System.Windows.Forms.MessageBox.show(“Hello”)的消息框时,该消息框将短暂显示,然后程序崩溃: mono(20661,0xa0f5e1d4)malloc:*对象0x7a6d86e0的错误:未分配要释放的指针 *在malloc\u error\u break中设置断点以进行调试 堆栈跟踪: 在 at(包装器管理为本机)Syst
我可以在主窗口代码中执行此消息框函数。但当该代码从Mac上的另一个线程执行时,程序崩溃。顺便说一下,消息框在Windows 7 PC上的工作线程上显示良好。因此,我想问题是,如何从Mac上的工作线程在主线程上执行此消息框?或者可能有另一种解决方案来修复Mac上的此崩溃?这只是一个猜测,但我在进行测试时检查非法CrossThreadCalls时遇到了类似的问题,但忘了将其删除。在不同的线程上执行任何类似于调用的操作都会导致崩溃,尽管它在Windows下运行良好。因此,检查两件事:
检查非法的CrossThreadCalls
。不管怎么说,这是个坏习惯MessageBox.Show