关于线程的问题请教?

bwangel 2009-02-27 12:41:17
我想做这样的工作
Thread t = new Thread(new ThreadStart(showProgress)); //显示进度条
t.Start();
GetData(); //是一个耗时操作
t.Abort();

void showProgress()
{
//显示进度条
}

一般GetData()是放在单独线程中,在主线程中显示进度条,
但是我想反过来,在主线程中GetData(),在单独的线程中显示进度条

但那个t一瞬间就执行完了,还是达不到效果,我该如何处理? 在showProgress中用Timer也不行,反正那个showProgress一到最后一个}号就挂了.
...全文
95 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgke 2009-02-27
  • 打赏
  • 举报
回复
void showProgress()
{
while(!m_RunEnd)
{
//进度条
}
}

bool m_RunEnd=false;
GetData()
{
//操作

//完成
m_RunEnd=true;
}
浪子-无悔 2009-02-27
  • 打赏
  • 举报
回复
lu guo ..
bwangel 2009-02-27
  • 打赏
  • 举报
回复
试过了,不行.

用BackGroudWorker弄了一下,进度条是跑起来了,
但由此又带来另一个问题,似乎显示DGV的时候,原先用单线程,DGV到时间一下子全部刷新,比较连贯.
但现在是明显看到了先清空再填满的操作.效果反而不如以前了(虽然这种效果也很酷,但我不想要),如何处理?
youyumin 2009-02-27
  • 打赏
  • 举报
回复

1楼的办法似乎可行,先试试.
dayizhixiaotutu 2009-02-27
  • 打赏
  • 举报
回复
BackgroundWorker
DoWork里面 执行GetData()
同时触发ReportProgress();
然后在ProgressChanged事件里显示进度条 具体的可以查查BackgroundWorker 的用法

ztenv 2009-02-27
  • 打赏
  • 举报
回复
这样做只能是所有的事儿都由主线程来做,因为既做了耗时的操作又更新了界面(虽然你是在另外的线程操作的界面但最后还是由主线程来完成)

bwangel 2009-02-27
  • 打赏
  • 举报
回复
1楼的办法似乎可行,先试试.
haha0369 2009-02-27
  • 打赏
  • 举报
回复
谁有没有更好的方法啊
  • 打赏
  • 举报
回复
如果你是主线程去做GetData,那干嘛不直接在GetData里控制进度条?显示进度条只是你getdata的一个步骤而已。
悔说话的哑巴 2009-02-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 king19840811 的回复:]
getData做完了通知滚动条结束
[/Quote]
..
king19840811 2009-02-27
  • 打赏
  • 举报
回复
getData做完了通知滚动条结束
cc_net 2009-02-27
  • 打赏
  • 举报
回复
主线程是UI线程

你用另外个线程操作UI界面的控件比较麻烦。

做好的方法就是用委托异步调用那个耗时的方法,给一个回调方法。
主线程就负责UI就好了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧