我正在查看示例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();
}
}
答案 0 :(得分:2)
确保通过kCFRunLoopCommonModes
CFRunLoop.ModeCommon
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
,只是将其设置为隐藏。