none
c#调用com组件的奇怪问题

    问题

  • c#调用com组件的奇怪问题

    最近做了一个简单的http服务器,要求在收到客户端发送的数据后根据数据的不同调用com组件的不同方法,现在总是没有响应,代码流程示例如下:

    1、线程定义
    thread = new Thread(new ThreadStart(listen));
    thread.IsBackground = true;
    thread.Start();


    2、方法体

    其中:c.OpenCard()是调用com组件的代码,该com组件由c++bulider编写。

            public void listen() {

                IPAddress localIp=IPAddress.Parse("127.0.0.1");
                listener = new TcpListener(localIp, 80);
                listener.Start();
         //如果把c.OpenCard();代码放在这里,则能够执行           
                while (is_active) {               
                    TcpClient s = listener.AcceptTcpClient();

      其他代码....

      MessageBox.Show("111");

      c.OpenCard();  //***调用com组件的代码,会一直卡在此处***

      MessageBox.Show("222");

      其他代码....
                }
            }

    3、碰到的问题:经过测试,只要是把c.OpenCard()方法放在listener.AcceptTcpClient();后面的任何地方,当客户机发送数据数据上来后,只有“111”的那个消息会弹出来,然后程序就会卡住一直不动,就像客户机没有发送数据上来以前listener.AcceptTcpClient()方法会阻止程序一样,程序运行到c.OpenCard()这里以后就会一直卡住,永远看不到222的消息。

    当吧c.OpenCard();移动到while语句前面时,一切正常,曾经试过把thread设置为单线程模式【thread.SetApartmentState(ApartmentState.STA)】,但仍然没有效果;

    请教各位大神帮忙啦,小弟跪谢!

    2016年5月16日 5:36

答案