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);
} 展开
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);
} 展开
1个回答
展开全部
你好!用线程实现加速一定是可以的!
推荐思路:
1 在窗体上放置BackgroundWorker控件,它是简化过的、专业的线程控件,并且可以界面通过事件进行互动!
2 如有必要,放置多个BackgroundWorker增加线程。
3 在BackgroundWorker的完成事件里,更新界面。
****************
之所以推荐后台运作控件而不是Thread,是因为后台运作控件使用较简单,不需要象Thread样定义回调函数。更重要的是后台运作控件是可以与界面UI互动的!
推荐思路:
1 在窗体上放置BackgroundWorker控件,它是简化过的、专业的线程控件,并且可以界面通过事件进行互动!
2 如有必要,放置多个BackgroundWorker增加线程。
3 在BackgroundWorker的完成事件里,更新界面。
****************
之所以推荐后台运作控件而不是Thread,是因为后台运作控件使用较简单,不需要象Thread样定义回调函数。更重要的是后台运作控件是可以与界面UI互动的!
更多追问追答
追问
这个我也尝试过,具体是怎么实现呢,因为这窗口加载数据多,想实现加载时候出行进度条。
追答
是不是要加载很多个表? 每加载一个表就把进度条弄进一下。
后台加载,线程又有多个,用进度条有点不好控制,但你可以用一个gif动画 表示正在加载即可。
不要用进度条来复杂化编码了!也不好维护。
具体实现是,把长时间运行的加载代码用一个方法实现。 让Backgroundworder调用这个方法。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询