亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請幫忙詳細解釋下這個函數里的每條語句,謝謝

請幫忙詳細解釋下這個函數里的每條語句,謝謝

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 關注
  • 78 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號