c#winform多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform多线程相关的知识,希望对你有一定的参考价值。

我的主窗体是一个MDI窗体,在里面有他、有一个treeview,利用他来打开新的子窗体,请问这种设计的winform程序需不需要用多线程,为什么?最好给个例子,不要复制粘贴!!!分数另付
什么样的程序需要用到多线程

一般在一些网络软件方面需要多线程,单单是管理软件什么的不需要。
在网络软件的话,需要有一个一直读取数据的方法,需要读取远程发来的信息。
方法就是一个死循环。这里如果不用多线程的话,程序一打开就什么也干不了。开了多线程,那个线程就只会干读取这件事,主线程就可以发消息干其他事,两个线程不会相互影响。
参考技术A 你都说了是打开子窗体,就用UI线程就可以了。

一般情况下在Windows编程中,我们会遇到UI线程(界面线程)和工作线程。

界面线程与工作线程有什么不同呢?主要区别就在界面线程会有一个消息队列,用于处理与界面的消息响应。而工作线程则没有,什么时候用工作线程呢?比如说你要去下载东西,下载了多少要在界面上去show一个进度条,这时候你就要用用工作线程来处理下载任务,而UI线程来处理进度条的响应。因为他们好像是同步进行的,而不能分先后。

在C#中,Microsoft为了方便编程人员操作,特定封装了一个工作线程叫BackGroundWorker来为开发人员提供方便。
参考技术B winform打开窗体有2种模式.
一种是模态窗口(showDialog方法),一种是非模态窗口(show方法).
非模态窗口打开后,父窗口的进程不会停止,从而可以继续操作父页面,而打开模态窗口的话,父窗口的进程将会停止,等到模态窗口关闭后,才会继续执行.这是winform程序的规矩.都不需要使用多线程.

比如我要打开一个Form2页面的窗口.
这2种效果是不一样的,试试就知道.

Form2 f2 = new Form2();
f2.Show();

Form2 f2 = new Form2();
f2.ShowDialog();

C# Winform 多线程 SOCKET 文件上传,下载

一个S, 服务器端
N个C,客户端

上传
S随时监听端口,C发来上传文件请求后开始接收文件,如果网络中断,下次C再连接的时候,可以支持上一次文件断点续传

下载
S随时监听端口,C发来下载文件请求后开始发送文件,如果网络中断,下次C再连接的时候,可以支持上一次文件断点续传

参考技术A 这可是很麻烦的,自己到网上找吧 参考技术B 文件数据流传输方法,自己定义握手协议就可以实现,底层SOCKET的代码网上多的是本回答被提问者和网友采纳 参考技术C 这个很麻烦的网上找一下教程吧。 参考技术D 服务器保存上传的每个(未完成)文件信息(如:已上传的流的位置)及特定的文件标识,客户端保存未完成(下载)的文件信息及特定标识;每次上传或下载文件时将相关信息写入协议中,传送到对方,对方解析后再进行数据传输。
如果客户端较多的话,可以考虑客户端先连接到服务器,再由服务器进行反连接。这样不会阻塞服务器的监听。

以上是关于c#winform多线程的主要内容,如果未能解决你的问题,请参考以下文章

C#WinForm在新线程中动态创建控件时,gif图动不动

C# Winform 多线程 SOCKET 文件上传,下载

c#winform 多线程绑定datagridview会造成假死,滚动条无法滚动,用委托怎么做

我用C# winform多线程,窗口就假死,等到线程全部完成了才可以点击。请问要怎么才可以让窗口不假死。

C# Winform项目中多线程环境下, 如何跨线程对Window窗体控件进行安全访问?

WinForm多线程实现HTTP网络检测工具