MessageBox.Show()导致Mac上的Mono崩溃

时间:2015-04-28 17:53:13

标签: winforms macos mono osx-yosemite

我使用Mono 3.12.1将WinForms应用程序移植到Mac OS X 10.10.2。主窗口很好。但是当我尝试从工作线程显示带有System.Windows.Forms.MessageBox.Show(" Hello")的消息框时,消息框将短暂显示,然后程序崩溃:

mono(20661,0xa0f5e1d4)malloc: *对象0x7a6d86e0的错误:未释放指针被释放 * 在malloc_error_break中设置断点以进行调试 堆栈跟踪:

at< 0xffffffff>   at(wrapper managed-to-native)System.Windows.Forms.XplatUICarbon.ReceiveNextEvent(uint,intptr,double,bool,intptr&)< 0xffffffff>   在System.Windows.Forms.XplatUICarbon.GetMessage(object,System.Windows.Forms.MSG&,intptr,int,int)< 0x0007f>   在System.Windows.Forms.XplatUI.GetMessage(object,System.Windows.Forms.MSG&,intptr,int,int)< 0x00039>   在System.Windows.Forms.Application.RunLoop(bool,System.Windows.Forms.ApplicationContext)< 0x00aff>   在System.Windows.Forms.Application.Run(System.Windows.Forms.ApplicationContext)< 0x0004f>   在System.Windows.Forms.Application.Run(System.Windows.Forms.Form)< 0x00033>   在RevelarPcCommX.Program.Main()< 0x0003f>   at(wrapper runtime-invoke)object.runtime_invoke_void(object,intptr,intptr,intptr)< 0xffffffff>

我可以从主窗口代码中执行此消息框功能。但是当从Mac上的另一个线程执行此代码时程序崩溃。顺便说一句,消息框在Windows 7 PC上的工作线程上显示正常。所以,我想问题是,如何在主线程上从Mac上的工作线程执行此消息框?或者可能还有另一种解决方案可以解决Mac上的崩溃问题吗?

1 个答案:

答案 0 :(得分:0)

这只是一个猜测,但是当我CheckForIllegalCrossThreadCalls用于测试目的而忘记删除它时,我遇到了类似的问题。尽管在Windows下工作正常,但在不同的线程上执行任何调用都会导致崩溃。所以,检查两件事:

  1. 确保您没有使用CheckForIllegalCrossThreadCalls。无论如何,这是不好的做法。

  2. 确保在工作线程上使用安全调用;如果您只是致电MessageBox.Show

  3. ,则可能不会这样做