Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
                }
            }
        }