当前位置: 代码迷 >> VB Dotnet >> VB.net可以多线程统制同一个窗体及其控件吗?还是要每个线程都创建一个窗体
  详细解决方案

VB.net可以多线程统制同一个窗体及其控件吗?还是要每个线程都创建一个窗体

热度:38   发布时间:2016-04-25 02:10:20.0
VB.net可以多线程控制同一个窗体及其控件吗?还是要每个线程都创建一个窗体
我开发一个测控程序,要求4个通道可以并行使用,每个通道弹出同一个窗体,操作过程相同但具体命令不一样。那么开4个线程怎么对窗体和它上面的控件进行控制。可以控制同一个窗体吗?还是分别创建1个窗体在每个线程上?初学者,求大侠帮帮我!!!
------解决思路----------------------
不管有4个还是400个业务通讯子线程,你的主 UI 线程应该只有一个。
------解决思路----------------------
我现在做的这个监控系统监控的设备不太多,不过设备数量是动态的,所以我做成了用一个线程轮询设备然后随页面切换刷新显示数据的伪标签页同时控制,感觉效果还不错,如果你觉得可以用标签页做各个设备的切换显示的话,你也可以试试
------解决思路----------------------
1、用多线程控制同一个窗体及其控件
2、线程用法Me.Invoke(New MethodInvoker(AddressOf 过程))
------解决思路----------------------
可以控制同一个窗体,在其他线程使用委托可以操控同一个窗体,也可以开几个窗体,开还是不开和能不能开主要看你的需求。
------解决思路----------------------
引用:
3楼的方法程序内部还是单线执行的吧?我的每个通道的操作都有一段时间,包括定时等待时间、收发数据等,要在这个等待过程中对其他通道进行操作,是不是就不能用这种方法了,再有用一个串口收发数据多线程操作可以吗

有主线程,有个threading下的timer。我这边都是串口设备,各自一个串口,平时每个设备每秒发组控制字然后读一组当前状态,需要特殊操作的时候在轮询时把该设备跳过,主线程亲自进行读写操作,各串口之间相互也没啥影响。同一个串口,不及时接收的话,数据应该也还在缓冲区呢吧?只要没满的话
------解决思路----------------------
引用:
没看懂您是另外开线程了没,我的应该是多线程对同一个串口操作,担心撞车。9楼回复:我的就是要求把当前操作状态显示在窗体上,不是只后台操作。

除了主线程,我另外开了一个线程不停读写。主线程需要操作的时候,我会先改变一个全局的旗帜变量,然后稍等一段时间再操作。线程在操作串口前会先读一下这个旗帜变量,如果主线程要操作,那么线程会跳过当前的操作,让主线程先处理。
多线程操作同一个串口?串口被占用时没法创建新实例吧,那就要每次用完立刻关掉,每个线程打开之前先判断串口是否可用。如果操作的延时和重叠太多的话,也可以试试用同一个线程判断收到的数据具体是归属于哪边的,不过多通道的我没试过怎么弄....

出于线程安全考虑,线程直接操作窗体控件会报错,可以用委托delegate来解决,也可以简单的让线程把设备状态存进全局变量,然后主线程读全局变量,依此操作窗体就行。
  相关解决方案