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传递给某个线程,某种情况下对我们来说这个线程是不可知道的,所以我们采用委托来封装我们方法来传递
- 1 回答
- 0 关注
- 62 浏览
添加回答
举报
0/150
提交
取消