首先定义一个委托,用于处理控件显示逻辑web
private delegate void UpdateLabelCallback(String info);并发
在定义一个利用委托来处理逻辑的方法网站
private void UpdateLabel(String info)
{
//this.lab_fileinfo.Text = info ;ui
if (this.lab_fileinfo.InvokeRequired)//若是调用控件的线程和建立建立控件的线程不是同一个则为True
{
while (!this.lab_fileinfo.IsHandleCreated)
{
if (this.lab_fileinfo.Disposing || this.lab_fileinfo.IsDisposed)
{
return;
}
}
UpdateLabelCallback callback = new UpdateLabelCallback(UpdateLabel);
this.lab_fileinfo.Invoke(callback, new object[] { info });
}
else {
this.lab_fileinfo.Text = info;
}this
}spa
最后再须要的地方,调用该方法线程
UpdateLabel("正在修改标签");xml
完成。对象
因为开发中使用了webclient 这里再说说webclient的一些问题。开发
DownloadAsync 这个方法要慎用,因为工程有点复杂,有的地方使用这个方法会提示 webclient不支持并发i/o操做。 所以改用了Download方法
补充说明: DownloadFileAsync 这个方法可使用,咱们在工程里面封装了一下,命名为DownloadAsync ,出现webclient不支持并发i/o操做的问题,不是由于这个方法,而是在下载文件的时候,重用了webclient对象,在循环中从新构建webclient对象便可。
这里,还加个小知识点,获取当前程序路径的方法代码
System.Environment.CurrentDirectory;
另外,因为iis默认不容许下载.config文件,因此客户端的配置.config没法下载,出现了问题:
须要修改配置,具体修改方法以下
在iis中,找到请求筛选,会列出全部设置的扩展名和规则
找到.config扩展,将其删除
重启网站 .config文件就能够正常访问了。
最后来个总结
1.自动更新程序,不能单独使用一个exe文件,即便是两个exe文件,负责更新做用的exe文件也不能有被更新的依赖项,不然会出现错误:“无访问已关闭的文件”
2.出现 “文件所在的卷已被外部更改,所以打开的文件再也不有效。”问题,是因为.exe.config文件没有数据,字节数为0致使的。
解决的办法,是让iis支持.config文件下载, 1是在请求筛选中删除.config配置 2是在mine-type中添加.config 的配置,值为 text/xml
3.webclient下载多个文件的时候,必须在循环体内建立新的对象,不然会出现问题:“webclient不支持并发i/o操做”
本博客文章大可能是经验积累总结,以避免从此忘却,记录下来。同时感谢您的阅读,也但愿能对您有所帮助。