用C#作了一个控制串口通信的ActiveX控件,将该控件加入到一个网页中,我想在关闭这个网页时能关闭ActiveX控件中打开的串口。应如何实现。请高手指教。

解决方案 »

  1.   

    你的ActiveX控件每一个操作请求,最好包括打开串口、进行操作、关闭串口,这样更加安全
      

  2.   

    页面脚本捕获到事件发生,才能调用你的 ActiveX 组件相应的 Close 方法。http://www.wyppt.com/htmldom/event_onunload.html
    http://www.w3school.com.cn/jquery/event_unload.asp
      

  3.   

    请二楼的能说得更详细些吗?我需要在ActiveX中书写什么语句,在网页上书写什么代码。谢谢!
      

  4.   


    写一个Close方法。别的我不需要多说。
      

  5.   

    我在ActiveX控件增加了关闭串口语句
    protected internal virtual void OnUnload(EventArgs e)
            {
                comm.Close();
            }
    然后在调用这个ActiveX控件的网页中增加代码:
    <script language="javascript" type="text/javascript">
       window.onunload = ad;
       function ad()
       {
          document.getElementById("btnreturn").click(); 
       }
       </script>
    <body onunload="ad()">
        <object id="ActiveX" classid="clsid:0A080A10-5F36-4781-A592-74FDCCB1F30B" codebase="ActiveX.cab"></object>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="btnreturn" runat="server" OnClick="btnreturn_Click" Text="返回" />
        ..........
    </body>
    但关闭网页后,串口还是没有关闭成功,麻烦楼上的给看一看那些语句有问题。谢谢!
      

  6.   

    你可以将   comm.Close();   语句后边写日志记录到文件里,然后分析一下日志文件。
      

  7.   

    实际上,你可以先在console或者窗体程序上测试ActiveX控件。例如写var oType = System.Type.GetTypeFromProgID("MyNamespace.MyActiveXClass");
    var o = System.Activator.CreateInstance(oType);
    Debug.Assert(串口是否打开(),"创建MyActiveXClass对象时应该自动打开串口");
    var value = oType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[0]);
    Debug.Assert(串口是否关闭(),"执行MyActiveXClass对象的Close方法时应该自动关闭串口");
    写这样一个测试,单独测试。