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 關注
- 78 瀏覽
添加回答
舉報
0/150
提交
取消