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); } }
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); }
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(); }