Re: [問題] delegate.BeginInvoke跟control.invoke …

看板C_Sharp作者 (いまがその時だ)時間18年前 (2007/11/22 10:50), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串6/9 (看更多)
※ 引述《reptile0426 ( )》之銘言: : 首先先感謝toki大的解說,他講的是control.BeginInvoke的觀念 : 後來我自己又看了一下兩者的差別 我也看錯 title XD 一看到 BeginInvoke 就想到 Control.BeginInvoke 基本上分別是這樣的 Return Work Thread Control.Invoke 完成工作 強制於 UI Thread Control.BeginInvoke 立即 強制於 UI Thread [delegate].Invoke 完成工作 Call Invoke 的 Thread [delegate].BeginInvoke 立即 新的背景 Thread 你可以開一個新的 Windows Application 專案,然後新增 1、Button = button1 2、TextBox = textBox1 (請設 multiline) 然後把 button1 的 OnClick 連到下面 source code 裡的 button1_Click using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public delegate void testDelegate(string text); public Form1() { InitializeComponent(); } private void UpdateTextBox(string text) { textBox1.Text += string.Format("{0}{1}", text, Environment.NewLine); } private void button1_Click(object sender, EventArgs e) { testDelegate t = new testDelegate(UpdateTextBox); this.Invoke(t, "Control.Invoke"); this.BeginInvoke(t, "Control.BeginInvoke"); t.Invoke("[delegate].Invoke"); // 建議先 comment 掉下面這行跑一次,再拿掉 comment 跑一次 // 下面這行就是所謂的 [delegate].BeginInvoke // 但是當你 call 了之後,在 UpdateTextBox 裡會出現 exception // 因為它使用新的背景 thread 來跑這個工作 // 但是 Form 不允許由別的 thread 來 access Form 上的任何 control // t.BeginInvoke("[delegate].BeginInvoke", null, null); } } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.161.34

11/22 12:38, , 1F
十分(!)清楚明遼~謝謝了toki大
11/22 12:38, 1F
文章代碼(AID): #17HEvxZY (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 6 之 9 篇):
文章代碼(AID): #17HEvxZY (C_Sharp)