线程间操作无效: 从不是创建控件的线程访问它 解决办法

今天在写应用软件的时候用到一个天气的web服务,在软件刚启动的时候就要访问,这样影响了软件启动速度,然后用了一个线程去处理访问web服务,把访问到的信息写到相应的控件。然后就出现问题了。线程间操作无效。原因是多个线程同时操作一个控件造成的。

解决办法是用一个委托,如下:

 

 #region 用于天气的委托
        delegate void SetPicboxValue();//括号里边可以写相应的参数
        #endregion

 

 

 

 #region 天气线程

            System.Threading.Thread td = new Thread(new ThreadStart(ShowWeather));
            td.Start();

            #endregion

 

 

 

 #region 天气信息

        private void ShowWeather()
        {
            try
            {
                if (strList == null)
                {
                    using (WeatherServer.WeatherWebService ws = new HySoft.OfficeManagement.WeatherServer.WeatherWebService())
                    {
                        if (ws != null)
                        {
                            strList = ws.getWeatherbyCityName("57083");
                        }
                    }
                }
                this.SetValue();
            }
            catch(Exception ex)
            {
                this.SetValue();
            }
        }

        private void SetValue()
        {
            if (pic_titleweather.InvokeRequired && label_titleweather.InvokeRequired)
            {
                SetPicboxValue setPic = new SetPicboxValue(SetValue);
                this.Invoke(setPic);//还有一个参数是数组对象,对应的就是SetValue()的参数,如果没有参数,则不用
            }
            else
            {

                if (strList != null && strList[1].ToString() != "")
                {
                    pic_titleweather.Image = imgWeatherList.Images["b_" + strList[8].ToString()];
                    pic_titleweather.Update();
                }
                else
                {
                    label_titleweather.Text = "暂无服务";
                    pic_titleweather.Enabled = label_titleweather.Enabled = false;
                }

            }
        }
            #endregion

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值