RSS   



  可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題 | 純文字版  


 


 
主題: [C&C++] [問題]問問timer與執行序的觀念C#   字型大小:||| 
lin66816
銀驢友〔初級〕
等級: 12等級: 12等級: 12


 . 積分: 453
 . 文章: 219
 . 收花: 3596 支
 . 送花: 321 支
 . 比例: 0.09
 . 在線: 3657 小時
 . 瀏覽: 14090 頁
 . 註冊: 6980
 . 失蹤: 1206
#1 : 2011-8-4 06:06 PM     全部回覆 引言回覆

最近剛好也在寫C#
剛好也有用到Invoke,根據我的經驗...
你可以把Invoke視為由背景OS去幫你執行某一個事件
而這個事件必須是有 委派 的function
委派的function可以看做是C++的function pointer
例如:
一般來說在thread裡面沒辦法去修改form的控制項的所有參數
但你可以透過委派跟Invoke來修改
舉一個簡單的例子...
我在某一個thread裡面想去修改ListBox的內容
就必須先把InvokeListBoxAdd委派給MethodListBoxAdd

        public delegate void MethodListBoxAdd(ListBox Name, bool Flag, string Message);
        public void InvokeListBoxAdd(ListBox Name, bool Flag, string Message)
        {
            if (Name.InvokeRequired)
            {
                MethodListBoxAdd t = new MethodListBoxAdd(InvokeListBoxAdd);
                Name.Invoke(t, Name, Flag, Message);
            }
            else
            {
                if (Flag)
                {
                    Name.Items.Add(Message);
                    Name.SetSelected(Name.Items.Count - 1, true);
                }
                else
                    Name.Items.Clear();
            }
        }

上述範例如果我是在Form的主執行序呼叫InvokeListBoxAdd,不會進去if (Name.InvokeRequired)裡面,如果是在執行序呼叫InvokeListBoxAdd的話就會進去,然後委派MethodListBoxAdd執行Invoke就可以達成我在執行序修改ListBox內容的動作。

以上如有錯誤可以提出大家討論,thanks。



[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接  
檢閱個人資料  發私人訊息  Blog  快速回覆 新增/修改 爬文標記

   

快速回覆
表情符號

更多 Smilies

字型大小 : |||      [完成後可按 Ctrl+Enter 發佈]        

溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別    關閉 表情符號    關閉 Discuz! 代碼    使用個人簽名    接收新回覆信件通知
發表時自動複製內容   [立即複製] (IE only)


 



所在時區為 GMT+8, 現在時間是 2024-11-22 12:03 AM
清除 Cookies - 連絡我們 - TWed2k © 2001-2046 - 純文字版 - 說明
Discuz! 0.1 | Processed in 0.020885 second(s), 7 queries , Qzip disabled