主线程上的计时器时 cocoa 上下文菜单导致崩溃

标签 cocoa nstimer monomac nsmenu

我正在 OSX10.6 上使用 mono,但这个问题也请向 Cocoa 专家提问。

我有一个附加到 NSTableView 的上下文菜单。当我选择上下文菜单时,处理程序(测试时为空)被调用,但应用程序崩溃了。

这是我在窗口 Controller 中的代码:

...
myNSTableView.Menu = new NSMenu();
NSMenuItem mi = new NSMenuItem("menu item 1", myHandler);
myNSTableView.Menu.AddItem(mi);
...

public void myHandler(object Sender, EventArgs e)
{
}

我还有一个 NSTimer 设置为每 200 毫秒重复一次

myNSTimer = NSTimer.CreateRepeatingScheduledTimer(new TimeSpan(2000000),delegate { 
        move an NSSlider            
        });

NSRunLoop.Main.AddTimer(myNSTimer, NSRunLoopMode.Common);
NSRunLoop.Main.AddTimer(myNSTimer, NSRunLoopMode.EventTracking);

当我尝试访问上下文菜单时,应用程序每次都会崩溃。

如果我不启动计时器,上下文菜单就可以。

我已经尝试了一切方法来使其正常工作,但已经没有想法了,所以我真的需要有人帮助,即使只是指出问题可能出在哪里。忘记现在是单声道的事实,有人能从 cocoa 的角度看到问题吗?

最佳答案

事实证明,计时器加剧了问题,但原因实际上是我没有为 NSMenuItems 声明实例变量,因此它们被垃圾收集并导致 objc 级别崩溃。

关于主线程上的计时器时 cocoa 上下文菜单导致崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13643814/

相关文章:

cocoa - 在 Cocoa 中创建带下划线的字体

iphone - 查找 NSTimer 是否无效

iphone - 减少关于 NSTimer 的分数

c# - 如何使用 C# 在 MonoMac 中打开一个窗口作为模态对话框?

objective-c - 复制文件而不卡住 GUI

macos - 在 Mac OS X 上以编程方式隐藏扩展坞

objective-c - 如何将视频效果应用到 osx 中的 native 应用程序

ios - tableView 中多个 NSTimer 对象的问题

cocoa - 来自字节数组的 NSImage

c# - 单声道项目: How do I assign a C# generic list as a TableView's datasource?