C# 一个窗体因打开时候需要初始化大量数据而很卡,可否用到多线程提示加载的进度吗?恳请大家帮帮忙!

FrmModeldocx=null;privatevoidbuttonItem62_Click(objectsender,EventArgse){BackgroundWo... FrmModel docx = null;
private void buttonItem62_Click(object sender, EventArgs e)
{BackgroundWorker m_BackgroundWorker = new BackgroundWorker(); m_BackgroundWorker.WorkerReportsProgress = true;
m_BackgroundWorker.WorkerSupportsCancellation = true;

m_BackgroundWorker.DoWork += new DoWorkEventHandler(DoWork);
m_BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(UpdateProgress);
m_BackgroundWorker.RunWorkerAsync(docx);
}
void DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
docx = e.Argument as FrmModel; docx = new FrmModel(); docx.ShowDialog();
}

void UpdateProgress(object sender, ProgressChangedEventArgs e)
{
label1.Text = string.Format("{0}", e.ProgressPercentage);
}
展开
 我来答
cy_paul
2012-12-01 · TA获得超过821个赞
知道小有建树答主
回答量:769
采纳率:100%
帮助的人:243万
展开全部
你好!用线程实现加速一定是可以的!
推荐思路:
1 在窗体上放置BackgroundWorker控件,它是简化过的、专业的线程控件,并且可以界面通过事件进行互动!
2 如有必要,放置多个BackgroundWorker增加线程。
3 在BackgroundWorker的完成事件里,更新界面。
****************
之所以推荐后台运作控件而不是Thread,是因为后台运作控件使用较简单,不需要象Thread样定义回调函数。更重要的是后台运作控件是可以与界面UI互动的!
更多追问追答
追问
这个我也尝试过,具体是怎么实现呢,因为这窗口加载数据多,想实现加载时候出行进度条。
追答
是不是要加载很多个表? 每加载一个表就把进度条弄进一下。
后台加载,线程又有多个,用进度条有点不好控制,但你可以用一个gif动画 表示正在加载即可。
不要用进度条来复杂化编码了!也不好维护。
具体实现是,把长时间运行的加载代码用一个方法实现。 让Backgroundworder调用这个方法。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式