CFMessagePort 没有收到消息

CFMessagePort is not receiving the messages

我在看例子https://developer.xamarin.com/samples/mac/NSPortExample/

我正在尝试将 Obj-C 代码重新创建到 C# 中,但没有成功。

下面是我的 Obj-C 的简单版本,谁能告诉我我做错了什么。

static class MainClass
    {
        static void Main(string[] args)
        {
            NSApplication.Init();
            var localPost = CFMessagePort.CreateLocalPort("com.example.app.port.server", HandleCFMessagePortCallBack, CFAllocator.Default);
            CFRunLoopSource runSource = localPost.CreateRunLoopSource();
            CFRunLoop.Current.AddSource(runSource, (NSString)string.Empty);
            while(true){}
        }
        static NSData HandleCFMessagePortCallBack(int type, NSData data)
        {
            Console.WriteLine("Data:{0}",data);
            return new NSData();
        }
    }

确保通过 CFRunLoop.ModeCommon:

设置 kCFRunLoopCommonModes
static CFMessagePort localPort;
static void Main(string[] args)
{
    NSApplication.Init();
    localPort = CFMessagePort.CreateLocalPort("com.example.app.port.server", (int type, NSData data) =>
    {
        Console.WriteLine("Data:{0}", data);
        return new NSData();
    });
    var runLoopSource = localPort.CreateRunLoopSource();
    CFRunLoop.Current.AddSource(runLoopSource, CFRunLoop.ModeCommon);
    NSApplication.Main(args);
}

注意:你也不应该执行自旋循环,你会阻塞端口的 运行 循环。您可以将它放在另一个线程上并在该线程上执行等待...就个人而言,在创建 "Cocca cmd line" 应用程序时,我仍然使用 Window/ViewController,只是将其设置为隐藏。