问题描述
界面上有按钮Button1和label22个控件,点击Button1privatevoidbutton1_Click(objectsender,EventArgse){Threadds=newThread(newThreadStart(aa));ds.IsBackground=true;ds.Start();//启动线程ds}标准刷新方法publicdelegatevoidbb();voidaa(){if(this.label2.InvokeRequired){bbxx=newbb(mm);xx.BeginInvoke(null,null);}else{this.label2.Text="AAAAAAAA";//由于是2个线程,我觉得不会到这里,如果可以,求解惑}}实际上:直接使用voidaa(){this.label2.Text="AAAAAAAA";}可以直接刷新控件如果在button1_Click(objectsender,EventArgse)中还有其他操作,则使用任何办法能不能刷新控件,因为invoke和begininvoke都要等到转换线程结束(我理解的有误吗?)有这样的一个业务场景,如何实现:在button1_Click(objectsender,EventArgse)中启动线程,定时刷新label2控件,同时button1_Click(objectsender,EventArgse)中的其他操作要求继续进行,如何实现?(有别的变通方法,单我要求只能这样实现!)在privatevoidbutton1_Click(objectsender,EventArgse){Threadds=newThread(newThreadStart(aa));ds.IsBackground=true;ds.Start();//启动线程dsThread.Sleep(12000);MessageBox.Show(“主线程结束”)}加入Thread.Sleep(12000);后,如何实现在MessageBox.Show(“主线程结束”)执行之前,线程ds每秒刷新label2一次此时的aa()如何写?
解决方案
解决方案二:
转换线程结束=主线程
解决方案三:
aa的函数里面要做成死循环,线程启动以后,代码执行完成就会释放,死循环可以保证你的线程一直处于执行状态,至于定时的业务和逻辑,写代码进行判断就可以~
解决方案四:
加个Timer不是很简单吗?非要用什么线程
解决方案五:
自己继续顶,请大家发言