您的位置:首页 > 其它

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

2010-03-03 09:42 411 查看
今天在写应用软件的时候用到一个天气的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐