测试时无法使用已与其基础RCW分离的COM对象

时间:2015-06-01 11:37:35

标签: c# .net com singleton

我正在使用.NET 4.5 TestTools和Visual Studio 2010进行一些测试。我正在测试一个在构造/初始化期间在某处创建COM实例的单例类,因此类状态将保持不变试验。问题是,每个测试都运行自己,运行所有测试会产生一个奇怪的结果 - 第一次测试成功,所有其他测试失败

  

" System.Runtime.InteropServices.InvalidComObjectException:COM对象   与基础RCW分离的,不能使用.."

COM引用损坏的结果(请参阅下面的myComInstance)。

我不确定我是否正确解释了问题。下面是我的单身课程

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace APITestTrial3
{
    public  partial class  frmMbxControl : Form
    {
        private frmMbxControl()
        {
            InitializeComponent();
            Connect("abhishek281mbx","PCMBXsrv.281","appmat1.bsd.com");

        }

        private static frmMbxControl g_Mbx;

        public static frmMbxControl GetMbx()
        {
            if (g_Mbx == null)
            {
                g_Mbx = new frmMbxControl();
            }

            return g_Mbx;
        }

        private string Connect(string mbxName, string serverName, string hostName)
        {
            //  frmControls frm = new frmControls();
            mbx.HostName = hostName;
            mbx.MbxName = mbxName;
            mbx.ServerName = serverName;
            mbx.replybox = "replyBox";

            if (mbx.Status != 0)
            {
                if (mbx.Connect())
                {
                    Console.WriteLine("Connected");
                    return ("Connected");
                }
                else
                {
                    return ("Not Connected");
                }
            }
            return ("Connected");
        }



        public String Send(String txnName, String txn)
        {
            String msgReply = "";
            String rep = "";
            //mbx.Send(txnName, txn);
            mbx.Open("ReplyBox1","c");
            mbx.SendAndReply(txnName, txn, "ReplyBox1");

            if (mbx.WaitForMsg("ReplyBox1", 0, ref msgReply, ref rep) == CwMboxLib.CwWaitResult.CwWaitOk)
            {

                rep = msgReply;
                mbx.Close("ReplyBox1");
            }

            return msgReply;
        }

        private void frmMbxControl_Load(object sender, EventArgs e)
        {

        }
    }
}

另一个类使用上面类的GetMbx()和Send()方法。

0 个答案:

没有答案