文档章节

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

xiaobo137
 xiaobo137
发布于 2017/09/04 09:38
字数 670
阅读 22
收藏 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
粉丝 34
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部