程序启动的时候会建立一个主线程,这个线程叫UI线程,从字面理解就可以知道这个线程专门处理有关UI(也就是界面)所有的事件。界面卡是因为,你进入了比如点击事件里面,线程一直在处理这个任务,这个任务一直没返回,也就是这个方法一直没返回。所以这个时候你点击界面是没反应的,也就是假死状态。 如果需要处理一个长时间的任务,应该建立一个新线程B去处理。同时B要去修改界面的话,需要用委托。因为界面是主线程负责,用委托是把修改界面这个动作交给主线程去做,如果由B去做的话可能会造成死锁之类问题 C#从另外一个线程操作windows窗体上的控件,必须要使用委托,通过委托调用UI线程去操控控件 //这个是窗体线程MainFrm public delegate void Delegate_ChangeCallBack(string _value); public Delegate_ChangeCallBack dlg_Change; public static MainFrm mainFrm; private void MainFrm_Load(object sender, EventArgs e) { mainFrm = this; dlg_Change = new Delegate_ChangeCallBack (ChangeUI); } private void ChangeUI(string _value) { this.txt_Change.text = _value; //do something... } private void button1_Click(object sender, EventArgs e)//下面是你的新线程 { Client c = new Client(); Thread newThread = new Thread(new ParameterizedThreadStart(c.NewThread()); newThread.Name = "Door2 Conn Thread:" + mission.Id; newThread.IsBackground = true; newThread.Start(); } Class Client { private void NewThread() { string _Id = "change"; MainFrm.mainFrm.BeginInvoke(MainFrm.mainFrm.dlg_Change , new object[] { _Id }); } }
C#解决UI主线程不响应
最新推荐文章于 2022-01-14 22:17:26 发布