Laurent, I'm guessing this is a threading issue. I ran into this call stack:
Unhandled Exception: System.ArgumentException: Duplicate type name within an assembly. at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr, System.Type parent, System.Type[] interfaces, PackingSize packingSize, Int32 typesize) [0x00000] at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr, System.Type parent, System.Type[] interfaces) [0x00000] at System.Reflection.Emit.ModuleBuilder.DefineType (System.String name, TypeAttributes attr) [0x00000] at Monobjc.Bridge.Generators.DynamicMessagingGenerator.DefineMessagingDelegate[UInt32] (System.String message, System.String typeName, System.Type[] parameterTypes) [0x00000] at Monobjc.Bridge.Generators.DynamicMessagingGenerator.SendMessage[UInt32] (System.String message, IntPtr receiver, IntPtr selector) [0x00000] at Monobjc.ObjectiveCRuntime.SendMessage[UInt32] (IManagedWrapper receiver, System.String selector) [0x00000] at Monobjc.Cocoa.NSData.get_Length () [0x00000] at MyAPI.XmlRpc.DownloadData (System.String url) [0x00000] at MyAPI.Loader.DownloadThumbnail (System.String fileUrl, System.String localName, Boolean bAsync, Boolean bEncrypt) [0x00000] at MyAPI.Loader.ThreadRun () [0x00000] I am firing off 3 threads that execute this same code. Looking at DynamicMessagingGenerator.SendMessage() it appears it would not be thread safe. SendMessage checks in messagingMethodsArgs to see if the key already exists... if not it creates a new one. In my console output from this crash I actually saw this same stack twice... which implies all 3 got past the if check, the first thread created the invoker and the next 2 threads failed because it already existed. And of course this is not easy to reproduce as it would be a timing issue. I'd appreciate your thoughts on this. I could see adding a lock around messagingMethodsArgs. Thanks, Duane