C# 关于多线程的一点事
来源:互联网 发布:68端口 编辑:程序博客网 时间:2024/06/05 23:08
C#作为一种高级语言,其安全性方面有了极大的提升,但同时,偶尔也会给我们的开发带来一些不便,或者说它在安全性方面的设置是我们需要了解并掌握的
而今天在这里要说的就是多线程。
C#程序有个主线程,我们也叫它UI线程,它负责程序主要的工作,但在开发过程中,我们经常需要用到多线程,如果我们像C++那样,简单的起个thread,然后运行线程去访问窗口组件是,VS编辑器会报错,这是因为C#做了一些安全限制,子线程是无法访问到UI线程创建的组件的,如果我们要访问,有两个方法:
1,通过Invoke,begininvoke函数,也就是C#的托管方式,这种方式基本可以满足我们大部分的要求了
2,同时设置 CheckForIllegalCrossThreadCalls = false;这是一个开关,设置以后,不同线程就可以访问到组件而不会被报错
然而,近期项目遇到一个坑:有个登录窗口,登录以后会自动登录进入到主界面窗口。这是两个不同的窗口。
自动登录的时候,会和后台做一些登录交互,从而导致登录窗口有白屏,这个现象我们很自然的想到是显示问题:窗口显示后立马做自动登录,导致卡屏。
然后我们自然想到用多线程,首先就是用上面第一种方式:invoke和begininvoke,可是无法解决卡屏问题,故而猜测,C#里面的托管,最终还是要到UI线程来执行
接着尝试第二种方式,前面说到C#是线程安全的,在子线程结束的时候,其创建的资源都会被回收,故而虽然可以解决卡屏问题,但是主界面窗口在子线程结束以后会消失,因为线程结束的同时窗口资源也已经被回收,即便我们尝试先创建窗口资源然后在子线程里面显示,还是会有这个问题。
看来,C#的多线程机制我们还需要多多研究。
最终解决方案很简单,加一个timer控件,延时做自动登录的操作,完美解决,其实这个方案一开始就想到了,只是不想增加控件所以先尝试多线程
- C# 关于多线程的一点事
- 关于C#多线程的学习和一点疑惑
- 多线程中关于synchronized的一点事
- 关于多线程的一点总结
- 关于多线程的一点笔记
- 关于多线程的一点感想
- 关于C#多线程、网络编程与计时器Timer的一点使用心得
- 关于JAVA多线程编程的一点笔记
- 关于java中多线程的一点理解
- 关于C#发送邮件的一点体会
- c#中关于gethashcode()的一点看法
- 关于C#的索引一点认识
- 关于C#无线网络的一点摘要
- 关于C#多态性的一点认识
- 关于C#委托的一点认识
- 关于多线程PostMessage和SenMessage的一点问题
- 关于并行、并发与多线程的一点理解
- 关于多线程Thread 与 Runnable 的一点总结
- 初学者怎么学习java,去哪里学好呢?
- jdk目录讲解
- HaDoop_分布式集群搭建(zookeeper,hadoop)
- CCF认证201604-1 折点计数
- Ubuntu下配置IP地址的方法
- C# 关于多线程的一点事
- 2017秋招,网易校招网络笔试第二题,java实现
- action处理excel表格
- 用java验证邮箱地址是否合法
- 第一个只出现一次的字符
- 阿里云优惠,阿里云邮箱优惠,阿里云ECS优惠码
- ViewPager加载Fragment,切换时onCreateView多次调用问题
- javaweb学习总结(三)泛型的详解
- 如何写出文档的价值