public void ConversionsAndThreadsAndInstanceMappingsOhMy() { IntPtr lrefJliArray = JNIEnv.NewObjectArray <int> (new[] { 1 }); IntPtr grefJliArray = JNIEnv.NewGlobalRef(lrefJliArray); JNIEnv.DeleteLocalRef(lrefJliArray); Java.Lang.Object[] jarray = (Java.Lang.Object[]) JNIEnv.GetArray(grefJliArray, JniHandleOwnership.DoNotTransfer, typeof(Java.Lang.Object)); Exception ignore_t1 = null; Exception ignore_t2 = null; var t1 = new Thread(() => { int[] output_array1 = new int[1]; for (int i = 0; i < 2000; ++i) { Console.WriteLine("# t1 iter: {0}", i); try { JNIEnv.CopyObjectArray(grefJliArray, output_array1); } catch (Exception e) { ignore_t1 = e; break; } } }); var t2 = new Thread(() => { for (int i = 0; i < 2000; ++i) { Console.WriteLine("# t2 iter: {0}", i); try { JNIEnv.GetArray <int>(jarray); } catch (Exception e) { ignore_t2 = e; break; } } }); t1.Start(); t2.Start(); t1.Join(); t2.Join(); for (int i = 0; i < jarray.Length; ++i) { jarray [i].Dispose(); jarray [i] = null; } JNIEnv.DeleteGlobalRef(grefJliArray); Assert.IsNull(ignore_t1, string.Format("No exception should be thrown [t1]! Got: {0}", ignore_t1)); Assert.IsNull(ignore_t2, string.Format("No exception should be thrown [t2]! Got: {0}", ignore_t2)); }
public void CopyObjectArray() { IntPtr p = JNIEnv.NewObjectArray(new byte[] { 1, 2, 3 }); byte[] dest = new byte [3]; JNIEnv.CopyObjectArray(p, dest); AssertArrays("CopyObjectArray: java->C#", dest, (byte)1, (byte)2, (byte)3); dest = new byte[] { 42 }; JNIEnv.CopyObjectArray(dest, p); byte written; using (var b = JNIEnv.GetArrayItem <Java.Lang.Byte>(p, 0)) written = (byte)b.ByteValue(); Assert.AreEqual(42, written); JNIEnv.DeleteLocalRef(p); }
public void MoarThreadingTests() { IntPtr lrefJliArray = JNIEnv.NewObjectArray <int> (new[] { 1 }); IntPtr grefJliArray = JNIEnv.NewGlobalRef(lrefJliArray); JNIEnv.DeleteLocalRef(lrefJliArray); Exception ignore_t1 = null; Exception ignore_t2 = null; var t1 = new Thread(() => { int[] output_array1 = new int[1]; for (int i = 0; i < 2000; ++i) { Console.WriteLine("# t1 iter: {0}", i); try { JNIEnv.CopyObjectArray(grefJliArray, output_array1); } catch (Exception e) { ignore_t1 = e; break; } } }); var t2 = new Thread(() => { for (int i = 0; i < 2000; ++i) { Console.WriteLine("# t2 iter: {0}", i); try { JNIEnv.GetObjectArray(grefJliArray, new[] { typeof(int) }); } catch (Exception e) { ignore_t2 = e; break; } } }); t1.Start(); t2.Start(); t1.Join(); t2.Join(); JNIEnv.DeleteGlobalRef(grefJliArray); Assert.IsNull(ignore_t1, string.Format("No exception should be thrown [t1]! Got: {0}", ignore_t1)); Assert.IsNull(ignore_t2, string.Format("No exception should be thrown [t2]! Got: {0}", ignore_t2)); }
public Android.OS.AsyncTask <TParams, TProgress, TResult>?Execute(params TParams[] @params) { if (id_execute_arrayLjava_lang_Object_ == IntPtr.Zero) { id_execute_arrayLjava_lang_Object_ = JNIEnv.GetMethodID(class_ref, "execute", "([Ljava/lang/Object;)Landroid/os/AsyncTask;"); } IntPtr native__params = JNIEnv.NewObjectArray <TParams> (@params); try { var __ret = Java.Lang.Object.GetObject <Android.OS.AsyncTask <TParams, TProgress, TResult> > (JNIEnv.CallObjectMethod(Handle, id_execute_arrayLjava_lang_Object_, new JValue(native__params)), JniHandleOwnership.TransferLocalRef); if (@params != null) { JNIEnv.CopyObjectArray(native__params, @params); } return(__ret); } finally { if (@params != null) { JNIEnv.DeleteLocalRef(native__params); } } }