为了账号安全,请及时绑定邮箱和手机立即绑定

请帮忙详细解释下这个函数里的每条语句,谢谢

请帮忙详细解释下这个函数里的每条语句,谢谢

C#
饮歌长啸 2022-12-17 21:17:10
namespace DelegateTest { internal delegate void ProgressDelegate(int value); public partial class Form1 : Form { public Form1() { InitializeComponent(); this.progressBar1.Maximum = 200000; } private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(SetValue); thread.IsBackground = true; thread.Start(); } private void SetValue() { for (int i = 1; i <= 200000; i++) { SetValue(i); } } private void SetValue(int i) { if (InvokeRequired) { Invoke(new ProgressDelegate(SetValue), i); return; } progressBar1.Value = i; } } }//为什么第一次InvokeRequired就是true//Invoke(new ProgressDelegate(SetValue), i); SetValue是什么意思?//InvokeRequired==false时执行 progressBar1.Value = i;?//请详细解释下这个函数里的每条语句
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

“为什么第一次InvokeRequired就是true”

因为你第一次调用的时候是在不同的线程所以invokereuqired是为true,而你后面的问题“InvokeRequired==false时执行
progressBar1.Value
=
i;?”
这是必须的因为执行了一个invoke操作,简单的你可以理解这个时候讲操作传递给了pb控件所在的线程,所以在invokereuqired=false的情况下,执行对pb的值更改操作 Invoke(new
ProgressDelegate(SetValue),
i);
SetValue是什么意思?SetValue是你自己定义的方法,这个语句的意思是将你SetValue方法通过delegate(委托)进行封装然后通过invoke传递给某个线程,某种情况下对我们来说这个线程是不可知道的,所以我们采用委托来封装我们方法来传递

查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信