首先定义一个委托,用于处理控件显示逻辑
private delegate void UpdateLabelCallback(String info);
在定义一个利用委托来处理逻辑的方法
private void UpdateLabel(String info)
{
//this.lab_fileinfo.Text = info ;
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;
}
}
最后再需要的地方,调用该方法
UpdateLabel("正在修改标签");
完成。
由于开发中使用了webclient 这里再说说webclient的一些问题。
DownloadAsync 这个方法要慎用,由于工程有点复杂,有的地方使用这个方法会提示 webclient不支持并发i/o操作。 因此改用了Download方法
补充说明: DownloadFileAsync 这个方法可以使用,我们在工程里面封装了一下,命名为DownloadAsync ,出现webclient不支持并发i/o操作的问题,不是因为这个方法,而是在下载文件的时候,重用了webclient对象,在循环中重新构建webclient对象即可。
这里,还加个小知识点,获取当前程序路径的方法代码
System.Environment.CurrentDirectory;
另外,由于iis默认不允许下载.config文件,所以客户端的配置.config无法下载,出现了问题:
HTTP 错误 404.7 - Not Found
请求筛选模块被配置为拒绝该文件扩展名。
需要修改配置,具体修改方法如下
在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操作”
本博客文章大多是经验积累总结,以免今后忘却,记录下来。同时感谢您的阅读,也希望能对您有所帮助。