大家帮帮忙吧,C# winform UI线程的问题

blackjunes 2012-05-07 12:21:15
问题如下:
在一个按钮事件中,需要执行一个ShowData(),但是这个很费时的,为了让用户感觉到程序在执行
--在这个按钮事件中让一个PictrueBox的图片显示(动态Gif)
但是我试了很多次,就是不行,必须要等到ShowData中的MessageBox弹出后才能显示这个图片
在网上找了些资料说把耗时的代码放到BeginInvoke的委托中,图片显示代码放到按钮事件中去
我试了 还是不行 ,按说这个应该很多程序都有这个,但是我确实卡在这了,大家鄙视我吧~~
怎么才能做到我按下去图片显示,运行完毕 图片消失啊?大家帮帮我吧
代码如下

private delegate void PicImage();
Thread th1;
private void btn_Start1_Click(object sender, EventArgs e)
{
th1 = new Thread(new ThreadStart(StartTh1));
th1.Start();
ShowData();//费时的代码
}
public void StartTh1()
{
BeginInvoke(new PicImage(ShowImge));
}
public void ShowImge()
{
Bitmap bmp = new Bitmap(@"F:\WorkSpace\DONET\ForeignTrader\ForeignTrader\imgs\run.gif",true);
this.pictureBox1.Image = bmp;
this.pictureBox1.Refresh();
this.pictureBox1.Visible = true;
}
public void ShowData()//费时的代码
{

string url = this.tb_url1.Text.Trim();

if (url.IndexOf(Uri.SchemeDelimiter) < 0)
{
url = string.Format("{0}{1}{2}",Uri.UriSchemeHttp,Uri.SchemeDelimiter,url);
}
string x = GetHtml(url);

if (x.Contains("CSDN"))
MessageBox.Show("true");
else
MessageBox.Show("false");
this.pictureBox1.Visible = false;

}

...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackjunes 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

void ShowImg();
void HideImg();

private void Button_Click(object sender,EventArgs e)
{
ShowImg()
Thread t = new Thread(ShowData)
t.Start()
}

void ShowData()
{
//'''''''
HideImg();
}
……
[/Quote]
谢谢啦,果然可以
blackjunes 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把 ShowData放到线程或异步方法中去,定时器不是线程,一样会阻塞
[/Quote]
我试试,
blackjunes 2012-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

void ShowImg();
void HideImg();

private void Button_Click(object sender,EventArgs e)
{
ShowImg()
Thread t = new Thread(ShowData)
t.Start()
}

void ShowData()
{
//'''''''
HideImg();
}
……
[/Quote]
我先试试,不行再请教。。
马少华 2012-05-07
  • 打赏
  • 举报
回复
void ShowImg();
void HideImg();

private void Button_Click(object sender,EventArgs e)
{
ShowImg()
Thread t = new Thread(ShowData)
t.Start()
}

void ShowData()
{
//'''''''
HideImg();
}

注意HideImg()里面要使用Control.Invoke方法
bdmh 2012-05-07
  • 打赏
  • 举报
回复
把 ShowData放到线程或异步方法中去,定时器不是线程,一样会阻塞

110,533

社区成员

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

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

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