Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms Show()导致Mac上的Mono崩溃_Winforms_Macos_Mono_Osx Yosemite - Fatal编程技术网

Winforms Show()导致Mac上的Mono崩溃

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

我使用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)


我可以在主窗口代码中执行此消息框函数。但当该代码从Mac上的另一个线程执行时,程序崩溃。顺便说一下,消息框在Windows 7 PC上的工作线程上显示良好。因此,我想问题是,如何从Mac上的工作线程在主线程上执行此消息框?或者可能有另一种解决方案来修复Mac上的此崩溃?

这只是一个猜测,但我在进行测试时检查非法CrossThreadCalls时遇到了类似的问题,但忘了将其删除。在不同的线程上执行任何类似于调用的操作都会导致崩溃,尽管它在Windows下运行良好。因此,检查两件事:

  • 确保您没有使用
    检查非法的CrossThreadCalls
    。不管怎么说,这是个坏习惯

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