May 10

在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。 不指定

piikee , 15:10 , 计算机相关 » .net专区 , 评论(0) , 引用(0) , 阅读(1897) , 本站原创 | |
  C#窗体的多线程一直是个难题,总是要出现奇奇怪怪的错误。今天开发alexSEO软件时,出现了在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。

主要出现问题代码如下:
   public   void runSEO()
        {

                while ((urlhead = sr.ReadLine()) != null)
                {

                    try
                    {
                        num = num + 1;
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlhead + url);
                        request.Timeout = int.Parse(tout.Text.ToString()) * 1000;
                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                       if(labb.IsHandleCreated)
                        labb.Invoke(labchange);
                    }
                    catch
                    {              
                    }
                          
                }

                sr.Close();
            if(run.IsHandleCreated)
                run.Invoke(btnchange);
            this.myThread.Abort();
            
        }


当调试运行中突然关闭软件时,labb.Invoke(labchange);语句就出先了“在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”错误。想了一通出现这种情况应该有两种可能。第一种应该是界面还来不及响应Invoke,第二种是界面线程已经结束,所以响应不了。最后解决办法是在labb.Invoke(labchange);前加一个if(labb.IsHandleCreated)判断就可以了。
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]