日期:2014-05-18  浏览次数:21065 次

关于线程的问题请教?
我想做这样的工作
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里控制进度条?显示进度条只是你getdata的一个步骤而已。

------解决方案--------------------
谁有没有更好的方法啊
------解决方案--------------------
这样做只能是所有的事儿都由主线程来做,因为既做了耗时的操作又更新了界面(虽然你是在另外的线程操作的界面但最后还是由主线程来完成)


------解决方案--------------------
BackgroundWorker 
DoWork里面 执行GetData()
同时触发ReportProgress();
然后在ProgressChanged事件里显示进度条 具体的可以查查BackgroundWorker 的用法


------解决方案--------------------

1楼的办法似乎可行,先试试.

------解决方案--------------------
lu guo ..