关于线程的问题请教?
我想做这样的工作
Thread t = new Thread(new ThreadStart(showProgress)); //显示进度条
t.Start();
GetData(); //是一个耗时操作
t.Abort();
void showProgress()
{
//显示进度条
}
一般GetData()是放在单独线程中,在主线程中显示进度条,
但是我想反过来,在主线程中GetData(),在单独的线程中显示进度条
但那个t一瞬间就执行完了,还是达不到效果,我该如何处理? 在showProgress中用Timer也不行,反正那个showProgress一到最后一个}号就挂了.
------解决方案--------------------void showProgress()
{
while(!m_RunEnd)
{
//进度条
}
}
bool m_RunEnd=false;
GetData()
{
//操作
//完成
m_RunEnd=true;
}
------解决方案--------------------
主线程是UI线程
你用另外个线程操作UI界面的控件比较麻烦。
做好的方法就是用委托异步调用那个耗时的方法,给一个回调方法。
主线程就负责UI就好了
------解决方案--------------------getData做完了通知滚动条结束
------解决方案--------------------
------解决方案--------------------如果你是主线程去做GetData,那干嘛不直接在GetData里控制进度条?显示进度条只是你getdata的一个步骤而已。
------解决方案--------------------谁有没有更好的方法啊
------解决方案--------------------这样做只能是所有的事儿都由主线程来做,因为既做了耗时的操作又更新了界面(虽然你是在另外的线程操作的界面但最后还是由主线程来完成)
------解决方案--------------------BackgroundWorker
DoWork里面 执行GetData()
同时触发ReportProgress();
然后在ProgressChanged事件里显示进度条 具体的可以查查BackgroundWorker 的用法
------解决方案--------------------1楼的办法似乎可行,先试试.
------解决方案--------------------lu guo ..