C#解决UI主线程不响应

程序启动的时候会建立一个主线程,这个线程叫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 });
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值