Example #1
0
        private static void ReleaseCOMObject()
        {
            SimpleCOMCalculatorClass comObj = new SimpleCOMCalculatorClass();
            int integer = 5;
            Console.Write("!{0} = ", integer);
            try
            {
                comObj.Factorial(ref integer);
                // ��ʾCOM�������ý��
                Console.WriteLine("{0}", integer);
            }
            finally
            {
                // ��ʽ�ͷ�COM����
                Console.WriteLine("����Marshal.ReleaseComObject()�ͷ�COM����...");
                int referenceCount = Marshal.ReleaseComObject(comObj);
                Console.WriteLine("COM����Ŀǰ�����ü���Ϊ��{0}", referenceCount);
            }

            Console.WriteLine("�ٴε���COM����ķ���Add()��");
            try
            {
                int result = comObj.Add(3, 5);
                Console.WriteLine("3 + 5 = {0}", result);
            }
            catch (Exception e)
            {
                Console.WriteLine("�쳣�׳���{0}\n��Ϣ��{1}", e.GetType().Name, e.Message);
            }
        }
Example #2
0
        static void CreateInstanceByWrapper()
        {
            int num0 = 6, num1 = 4;

            SimpleCOMCalculatorClass calcObj = new SimpleCOMCalculatorClass();

            Console.WriteLine("���㣺{0} + {1} = {2}",
                num0, num1, calcObj.Add(num0, num1));

            Console.WriteLine("���㣺{0} - {1} = {2}",
                num0, num1, calcObj.Subtract(num0, num1));

            ISimpleCOMCalculator calcInterfaceObj = new SimpleCOMCalculatorClass();

            Console.WriteLine("���㣺{0} * {1} = {2}",
                num0, num1, calcInterfaceObj.Multiply(num0, num1));

            Console.WriteLine("���㣺{0} / {1} = {2}",
                num0, num1, calcInterfaceObj.Divide(num0, num1));

            int factorialResult = num1;
            calcInterfaceObj.Factorial(ref factorialResult);
            Console.WriteLine("���㣺!{0} = {1}",
                            num1, factorialResult);
        }
Example #3
0
        static void Main(string[] args)
        {
            Console.WriteLine("��ʼApartmentΪ: {0}",
                Thread.CurrentThread.GetApartmentState());

            int result = 0;

            // ����STA COM����
            SimpleCOMCalculatorClass staObj
                = new SimpleCOMCalculatorClass();
            result = staObj.Add(3, 5);
            Console.WriteLine("STA���󷽷���3 + 5 = {0}, Threading: {1}",
                result, Thread.CurrentThread.GetApartmentState());

            // ����MTA COM����
            COMMTAObjClass mtaObj
                = new COMMTAObjClass();
            result = mtaObj.AddIntegers(3, 5);
            Console.WriteLine("MTA���󷽷�: 3 + 5 = {0}, Threading: {1}",
                result, Thread.CurrentThread.GetApartmentState());

            // ʹ��SetApartmentState����Apartment
            try
            {
                Thread.CurrentThread.SetApartmentState(
                    ApartmentState.MTA);
                Console.WriteLine(
                    "����SetApartmentState����: {0}", ApartmentState.MTA);
            }
            catch (InvalidOperationException e)
            {
                Console.WriteLine(
                    "SetApartmentState�׳��쳣��Ϣ: {0}",
                    e.Message);
            }

            // ʹ��TrySetApartmentState����Apartment
            try
            {
                bool changeStatus =
                    Thread.CurrentThread.TrySetApartmentState(
                        ApartmentState.MTA);
                Console.WriteLine(
                    "TrySetApartmentState���ؽ��: ����{0}",
                    changeStatus ? "�ɹ�" : "ʧ��");
            }
            catch (InvalidOperationException e)
            {
                Console.WriteLine(
                    "TrySetApartmentStates�׳��쳣��Ϣ: {0}",
                    e.Message);
            }

            Console.WriteLine("\r\n��������˳�...");
            Console.Read();
        }