文档章节

C# Winform多线程操作控件代码

xiaobo137
 xiaobo137
发布于 2017/09/04 09:38
字数 670
阅读 29
收藏 0

首先定义一个委托,用于处理控件显示逻辑

  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操作”
 

 

本博客文章大多是经验积累总结,以免今后忘却,记录下来。同时感谢您的阅读,也希望能对您有所帮助。

 

© 著作权归作者所有

共有 人打赏支持
xiaobo137
粉丝 35
博文 64
码字总数 33309
作品 0
长沙
项目经理
私信 提问
C# WinForm开发系列 - Thread/Delegate/Event

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。那我们为什么...

长征2号
2017/10/11
0
0
一个简易的SocketIM

今天做了一个简易的socketIM的小示例。基本思想是开启两个winform,每个winform既充当服务器也充当客户端。一个监听8000端口,另外一个监听8001端口,两个winform接收到信息之后将信息显示在...

王二狗子11
01/08
0
0
C# WinForm开发系列 - File

介绍文件目录相关操作, 涉及配置文件使用, 编码转换, Web下载, 加密处理等. (文章及相关代码搜集自网络,仅供学习参考,版权属于原作者! ) 01. 愚翁专栏 CSDN第一期总结之四:Stream的问题 对于...

长征2号
2017/11/08
0
0
C#为什么多线程控制 winform 需要用委托?

C#为什么多线程控制winform需要用委托?比如我新起了一个线程A,在A线程里要对winform的list控件里显示数据,我需要用一个委托函数来实现。

小卒过河
2011/07/04
4.3K
3
winform频繁刷新导致界面闪烁解决方法

一、通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将提供最佳效果。默认情况下,标准 Windows 窗体...

hpnet_zsh
02/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hive的三种Join方式

Hive中就是把Map,Reduce的Join拿过来,通过SQL来表示。 参考链接:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins Common/Shuffle/Reduce Join Reduce Join在Hiv......

GordonNemo
11分钟前
0
0
Spark学习记录(三)核心API模块介绍

spark ------------- 基于hadoop的mr,扩展MR模型高效使用MR模型,内存型集群计算,提高app处理速度。 spark特点 ------------- 速度:在内存中存储中间结果。 支持多种语言。Scala、Java、P...

我爱春天的毛毛雨
16分钟前
0
0
PHP5、PHP7安装

11月13日任务 11.10/11.11/11.12 安装PHP5 11.13 安装PHP7 PHP官网www.php.net 当前主流版本为5.6/7.1 cd /usr/local/src/ wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2 tar z......

zgxlinux
17分钟前
0
0
React 项目结构和组件命名之道

摘要: > * 原文地址:[structuring projects and naming components in react](https://hackernoon.com/structuring-projects-and-naming-components-in-react-1261b6e18d76) > * 原文作者:......

阿里云官方博客
17分钟前
2
0
无维护地稳定运行了8 年的 Hyperic HQ

最近在诊断一个系统意外停机时, 发现一个8年前部署部署的Hypeirc HQ 4.2,已经免维护,稳定运行了8年多。提供了及时的诊断信息。单击右下角的蓝色泡泡,可显示报警信息。

MartinKing
32分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部