我打算做一个串口检测软件,在UI上使用了两个listView控件,打算把检测进度显示在listView控件上。现在我把读写串口等等其他操作都封装成了两个过程:
Test(this.listView1,this.serialPort1);和Test(this.listView2,this.serialPort2);
这个两个过程调用的是同一个函数,功能是把进度显示到UI上,只是参数不同而已,现在要求是同时能执行这两个函数,而不是执行完了第一个,然后才执行第二个。简而言之,在界面上我要求能像迅雷下载一样,两个进度条同时能进行。
请问这个功能在多线程中怎样才能实现?
Test(this.listView1,this.serialPort1);和Test(this.listView2,this.serialPort2);
这个两个过程调用的是同一个函数,功能是把进度显示到UI上,只是参数不同而已,现在要求是同时能执行这两个函数,而不是执行完了第一个,然后才执行第二个。简而言之,在界面上我要求能像迅雷下载一样,两个进度条同时能进行。
请问这个功能在多线程中怎样才能实现?
比如:
void UpdateUI(ListView listView, string message){
....
}然后在
Test这个函数需要更新UI的时候调用
this.Invoke(...)这个函数来在UI线程上执行UpdateUI方法
Test2(this.listView2,this.serialPort2);
两个线程同时开启,使用UI委托控制进度条即可。在线程中是不能直接操作UI控件的,用Invoke方法
方法还是由子线程做,只是遇到UI更新时用下面的语句
this.Invoke(new MethodInvoker(delegate() {……method……})); 或者
contorlname.Invoke(new MethodInvoker(delegate() {……method……}));