我在Xamarin.Mac目前有很多困難。Xamarin.Mac事件和線程似乎不能一起工作
基本上我想要做的就是POST和從Web服務器獲取一些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的本地實現。
現在,這是我發現自己的situaiton: 如果我有傳遞給它一個匿名函數NSURLConnection的異步請求,如果我採取了它的工作原理永遠點擊 後單擊並調用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
任何人有什麼想法?我很難過。
感謝
我有類似的問題。我的輸出錯誤看起來完全一樣...我仍然沒有解決如何解決它;-) – Humphrey