怎么异步显示加载中 winform
2个回答
展开全部
这里涉及到的内容有点多了哦,不过如果把这些吃下去,winform也就过关了。
首先明确需要你说的异步显示的原因,当程序中需要进行长时间的计算时,如果在主线程中进行你的窗口会卡主,显示“程序没有响应”,造成界面不友好。所以出现了主线程只做数据显示,而计算都放到其他线程中进行的思路。大致的方法如下:
在主线程中设置代理(delegate)或者事件(event)。而当子线程运算完成或者运算到某一个节点时,调用主线程窗口的代理/事件,修改主窗体的显示。这里主要涉及的知识有多线程(仅仅知道如何启动子线程就可以,不需要一开始就接触线程安全)、代理、事件。具体可以参考这篇:http://wenku.baidu.com/view/39820c366c85ec3a87c2c5ea.html
首先明确需要你说的异步显示的原因,当程序中需要进行长时间的计算时,如果在主线程中进行你的窗口会卡主,显示“程序没有响应”,造成界面不友好。所以出现了主线程只做数据显示,而计算都放到其他线程中进行的思路。大致的方法如下:
在主线程中设置代理(delegate)或者事件(event)。而当子线程运算完成或者运算到某一个节点时,调用主线程窗口的代理/事件,修改主窗体的显示。这里主要涉及的知识有多线程(仅仅知道如何启动子线程就可以,不需要一开始就接触线程安全)、代理、事件。具体可以参考这篇:http://wenku.baidu.com/view/39820c366c85ec3a87c2c5ea.html
展开全部
//跟楼上观点基本一致,给你个处理异步线程demo的关键代码:
TH_Login = new Thread(new ThreadStart(login));
TH_Login.IsBackground = true;
TH_Login.Start();
private void login()
{
this.Invoke(new delegatePic(picbox_Loading_Show), panel2, panel3, picbox_Loading);
}
private delegate void delegatePic(Panel p1, Panel p2, PictureBox pb);
private void picbox_Loading_Show(Panel p1, Panel p2, PictureBox pb)
{
p1.Enabled = false;
p2.Enabled = false;
picbox_Loading.Visible = true;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询