日期:2014-05-17  浏览次数:20791 次

C# 关于线程和I/O流的问题
本帖最后由 u011919488 于 2013-09-11 14:31:57 编辑
用一个窗体(以下称A窗体)中的线程检测第三方设备的数据 有数据则打开另一个窗体(B窗体,只打开一个)   

B窗体中  有一个System.Threading.Timer 用来监听(HttpListenerContext)数据流 
同时还有一个timer控件 控制窗体抖动    我在关闭这个窗体的时候   会报 “由于线程退出或应用程序请求,已中止 I/O 操作”(如果不使用监听数据流线程则没问题)  
 
代码如下:



 //监听按键信息
        System.Threading.Timer threadTimer;
/// <summary>
        /// 开启监听
        /// </summary>
        private void StartListen()
        {
            threadTimer = new System.Threading.Timer(new TimerCallback(CatchTelNumber), null, 1000, 500);
            listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问
            listerner.Prefixes.Add("http://localhost:4529/login/");
            listerner.Start();
        }


  /// <summary>
        /// 获取按键信息
        /// </summary>
        /// <param name="state"></param>
        private void CatchTelNumber(object state)
        {
            _th = new Thread(new ThreadStart(() =>
            {
                //等待请求连接
                //没有请求则GetContext处于阻塞状态
                lock (_lock)
                {
                    HttpListenerContext ctx = listerner.GetContext();