Android跑马灯进度条,跑马灯进度条有问题

作者在学习多线程编程时遇到问题,文本更改线程正常,而进度条动画未同步。本文将探讨如何修正Thread.Sleep导致的UI阻塞,以实现同步更新标签和进度条。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在学习使用线程并进行一些多线程演示。

我有一个名为lblText的标签和一个名为pgbRun的选取框进度条。我制作了2个线程,一个让标签的文本在每个Thread.Sleep()调用后更改,其他让标签的文本更改时进度条显示动画。

我遇到的问题是文本更改线程似乎工作正常,但进度条线程有问题。 pgbRun刚刚开始动画后文本更改完成。

请帮我看看我的代码有什么问题,并告诉我一些解决问题的方法。非常感谢!跑马灯进度条有问题

private delegate void formDelegate();

private void btnRun_Click(object sender, EventArgs e)

{

Thread thread = new Thread(new ThreadStart(new formDelegate(textChange)));

thread.IsBackground = true;

thread.Start();

}

public void textChange()

{

if (lblText.InvokeRequired)

{

lblText.BeginInvoke(new formDelegate(textChange));

}

else

{

Thread thread = new Thread(new ThreadStart(new formDelegate(progess)));

thread.IsBackground = true;

thread.Start();

//I try make single thread that config progress bar here but i have same trouble.

for (int i = 0; i < 10; i++)

{

lblText.Text = "Count: " + i;

lblText.Update();

lblText.Refresh();

Thread.Sleep(300);

}

}

}

public void progess()

{

if (pgbRun.InvokeRequired)

{

pgbRun.BeginInvoke(new formDelegate(progess));

}

else

{

pgbRun.Style = ProgressBarStyle.Marquee;

pgbRun.MarqueeAnimationSpeed = 20;

pgbRun.Update();

pgbRun.Refresh();

}

}

+1

你的线程没有做任何有用的事情,他们立即调用到UI线程。 textChange()代码不能完成更多的事情,但会导致UI挂起3秒钟。您可以看到标签更改,因为您调用Update()。 projss()中的BeginInvoke()调用在UI线程忙于睡眠3秒内停滞不前,因此您没有看到进度条发生任何事情。你需要抛弃这些代码。 –

+0

@HansPassant,我该如何解决它? –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值