目前,我在使用 Xamarin.Mac 时遇到了很多困难。
基本上我想做的就是向/从网络服务器发布和抓取一些 JSON,然后调用一个事件,该事件通过委托冒泡到(最终将是一个)UI 更改事件(目前它只是一个 debug.writeline称呼)。
我有两个 PCL 库,一个是“核心”,另一个是核心引用库,还有一个 WPF 应用程序和一个 OS X 应用程序 - WPF 应用程序工作正常。我也在使用 MVVMCross。
起初,我尝试使用一个使用 HTTPWebRequest 的预先存在的类,并且对于第一个按钮单击(触发此调用)它工作正常。在第二个按钮上单击 OS X 应用程序崩溃。我尝试切换到 HttpClient,没有骰子。
阅读此线程后:https : //bugzilla.xamarin.com/show_bug.cgi?id=19906 我尝试使用接口将 OS X 应用程序的 HTTP 类切换到 NSUrlConnection 的本机实现。
现在这是我发现自己的情况:如果我有一个 NSUrlConnection ASync 请求并传递给它一个匿名函数,它会在点击后永远工作如果我把它拿出来并调用一个 FireEvent() 函数,它只会引发事件(这可能会引发更多事件链)然后它永远有效,单击后单击如果我同时具有具有匿名功能的异步和 FireEvent,则在第三次单击触发此功能的按钮时,它会引发本机崩溃。
如果我取出所有异步的东西,它会正常工作,但这并不理想。
有任何想法吗?我无计可施。
public void ExecuteAsync()
{
var request = new NSUrlRequest(new NSUrl("http://www.example.com"));
asyncRunning = true;
NSUrlConnection.SendAsynchronousRequest(request, NSOperationQueue.MainQueue, delegate(NSUrlResponse response, NSData data, NSError error) {
var responseStr = data.ToString();
var blah = new HttpResponseCompleteEventArgs("{TESTJSONThatIveRemovedForReadability}");
System.Diagnostics.Debug.WriteLine("Inside IsMainThread: " + NSThread.IsMain.ToString());
response.InvokeOnMainThread ( delegate {
FireEvent(blah);
System.Diagnostics.Debug.WriteLine("Inside IsMainThread invoke: " + NSThread.IsMain.ToString());
});
});
System.Diagnostics.Debug.WriteLine("Outside IsMainThread: " + NSThread.IsMain.ToString());
}
和崩溃
Stacktrace:
at <unknown> <0xffffffff>
at (wrapper managed-to-native) MonoMac.AppKit.NSApplication.NSApplicationMain (int,string[]) <IL 0x0009d, 0xffffffff>
at MonoMac.AppKit.NSApplication.Main (string[]) [0x00041] in /Users/builder/data/lanes/xamcore-lion-1.8-branch/b8b75fd4/source/xamcore/src/AppKit/NSApplication.cs:105
at FreshlySqueezed.Mac.MainClass.Main (string[]) [0x00007] in /Users/blah/Development/Development/FreshlySqueezed/FreshlySqueezed.Mac/Main.cs:14
at (wrapper runtime-invoke) <Module>.runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00050, 0xffffffff>
Native stacktrace:
Debug info from gdb:
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
^D
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quit
^D
quProcess 2693 stopped
* thread #1: tid = 0x1e2f7, 0x91b0cfed libsystem_kernel.dylib`__wait4 + 5, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
thread #2: tid = 0x1e30e, 0x91b0d992 libsystem_kernel.dylib`kevent64 + 10, queue = 'com.apple.libdispatch-manager'
thread #3: tid = 0x1e30f, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
thread #4: tid = 0x1e310, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
thread #5: tid = 0x1e311, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
thread #6: tid = 0x1e314, 0x91b07fb6 libsystem_kernel.dylib`semaphore_wait_trap + 10
thread #7: tid = 0x1e315, 0x91b0ca26 libsystem_kernel.dylib`__recvfrom + 10
thread #8: tid = 0x1e32c, 0x91b07f7a libsystem_kernel.dylib`mach_msg_trap + 10
thread #9: tid = 0x1e32e, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
(lldb) quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit
quit^D
qu* thread #1: tid = 0x1e2f7, 0x91b0cfed libsystem_kernel.dylib`__wait4 + 5, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
* frame #0: 0x91b0cfed libsystem_kernel.dylib`__wait4 + 5
frame #1: 0x92c46ec5 libsystem_c.dylib`waitpid$UNIX2003 + 48
frame #2: 0x018ab5f9 libmono-2.0.dylib`mono_handle_native_sigsegv(signal=11, ctx=0x006e1fe0) + 489 at mini-exceptions.c:2305
frame #3: 0x018fd9d5 libmono-2.0.dylib`mono_arch_handle_altstack_exception(sigctx=0x006e1fe0, fault_addr=0x608962a8, stack_ovf=0) + 149 at exceptions-x86.c:1170
frame #4: 0x01804351 libmono-2.0.dylib`mono_sigsegv_signal_handler(_dummy=11, info=0x006e1fa0, context=0x006e1fe0) + 369 at mini.c:6842
frame #5: 0x94fd1deb libsystem_platform.dylib`_sigtramp + 43
thread #2: tid = 0x1e30e, 0x91b0d992 libsystem_kernel.dylib`kevent64 + 10, queue = 'com.apple.libdispatch-manager'
frame #0: 0x91b0d992 libsystem_kernel.dylib`kevent64 + 10
frame #1: 0x9a415899 libdispatch.dylib`_dispatch_mgr_invoke + 238
frame #2: 0x9a415532 libdispatch.dylib`_dispatch_mgr_thread + 52
thread #3: tid = 0x1e30f, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #0: 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x91cfbdcf libsystem_pthread.dylib`_pthread_wqthread + 372
thread #4: tid = 0x1e310, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #0: 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x91cfbdcf libsystem_pthread.dylib`_pthread_wqthread + 372
thread #5: tid = 0x1e311, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #0: 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x91cfbdcf libsystem_pthread.dylib`_pthread_wqthread + 372
thread #6: tid = 0x1e314, 0x91b07fb6 libsystem_kernel.dylib`semaphore_wait_trap + 10
frame #0: 0x91b07fb6 libsystem_kernel.dylib`semaphore_wait_trap + 10
frame #1: 0x01a1891e libmono-2.0.dylib`mono_sem_wait(sem=<unavailable>, alertable=<unavailable>, sem=0x01b1ac20, alertable=1) + 30 at mono-semaphore.c:121
frame #2: 0x019c43ea libmono-2.0.dylib`finalizer_thread(unused=0x00000000) + 74 at gc.c:1073
frame #3: 0x0199c654 libmono-2.0.dylib`start_wrapper [inlined] start_wrapper_internal(data=0x00193bd0) + 442 at threads.c:647
frame #4: 0x0199c49a libmono-2.0.dylib`start_wrapper(data=0x00193bd0) + 26 at threads.c:692
frame #5: 0x01a1de1d libmono-2.0.dylib`inner_start_thread(arg=0xbffff2c0) + 253 at mono-threads-posix.c:94
frame #6: 0x01a3eebd libmono-2.0.dylib`GC_start_routine(arg=0x006e2f60) + 93 at pthread_support.c:1502
frame #7: 0x91cfa5fb libsystem_pthread.dylib`_pthread_body + 144
frame #8: 0x91cfa485 libsystem_pthread.dylib`_pthread_start + 130
thread #7: tid = 0x1e315, 0x91b0ca26 libsystem_kernel.dylib`__recvfrom + 10
frame #0: 0x91b0ca26 libsystem_kernel.dylib`__recvfrom + 10
frame #1: 0x92c470c9 libsystem_c.dylib`recv$UNIX2003 + 54
frame #2: 0x018d58c0 libmono-2.0.dylib`socket_transport_recv(buf=0xb039aeed, len=11) + 160 at debugger-agent.c:1085
frame #3: 0x018d1c8d libmono-2.0.dylib`debugger_thread(arg=0x00000000) + 21485 at debugger-agent.c:1475
frame #4: 0x01a1de1d libmono-2.0.dylib`inner_start_thread(arg=0xbffff2c0) + 253 at mono-threads-posix.c:94
frame #5: 0x01a3eebd libmono-2.0.dylib`GC_start_routine(arg=0x006e2f60) + 93 at pthread_support.c:1502
frame #6: 0x91cfa5fb libsystem_pthread.dylib`_pthread_body + 144
frame #7: 0x91cfa485 libsystem_pthread.dylib`_pthread_start + 130
thread #8: tid = 0x1e32c, 0x91b07f7a libsystem_kernel.dylib`mach_msg_trap + 10
frame #0: 0x91b07f7a libsystem_kernel.dylib`mach_msg_trap + 10
frame #1: 0x91b0716c libsystem_kernel.dylib`mach_msg + 68
frame #2: 0x9bea0bf9 CoreFoundation`__CFRunLoopServiceMachPort + 169
frame #3: 0x9bea01d1 CoreFoundation`__CFRunLoopRun + 1393
frame #4: 0x9be9f9ea CoreFoundation`CFRunLoopRunSpecific + 394
frame #5: 0x9be9f84b CoreFoundation`CFRunLoopRunInMode + 123
frame #6: 0x90de9b88 AppKit`_NSEventThread + 283
frame #7: 0x91cfa5fb libsystem_pthread.dylib`_pthread_body + 144
frame #8: 0x91cfa485 libsystem_pthread.dylib`_pthread_start + 130
thread #9: tid = 0x1e32e, 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #0: 0x91b0d046 libsystem_kernel.dylib`__workq_kernreturn + 10
frame #1: 0x91cfbdcf libsystem_pthread.dylib`_pthread_wqthread + 372
Executing commands in '/tmp/mono-gdb-commands.J45EfM'.
(lldb) process attach --pid 2693
Process 2693 stopped
有人知道吗?我难住了。
谢谢