2011-07-11 62 views
2

有沒有人有鏈接到使用調用的學習資源?在Windows窗體中調用

我在努力學習,但所有我見過的例子都無法適應我的目的。

+1

這將有助於您的目的更具體。 – gsharp

+0

對不起,我正在編寫一個程序,它通過串行連接與設備進行通信。目前,程序會嘗試運行一段代碼,直到輸入發生更改,但是該部分位於GUI線程中,因此程序無法響應更改。我被告知我需要將代碼段放在另一個線程中,並使用Invoke來訪問它。希望這會有所幫助,謝謝 –

+0

請下次更新您的問題,而不是寫在評論中。 – gsharp

回答

7

你嘗試MSDN Control.Invoke

我只是寫了一個小的WinForm程序來演示Control.Invoke。 創建窗體時,在後臺線程上開始一些工作。完成該工作後,更新標籤中的狀態。

public Form1() 
{ 
    InitializeComponent(); 
    //Do some work on a new thread 
    Thread backgroundThread = new Thread(BackgroundWork); 
    backgroundThread.Start(); 
}   

private void BackgroundWork() 
{ 
    int counter = 0; 
    while (counter < 5) 
    { 
     counter++; 
     Thread.Sleep(50); 
    } 

    DoWorkOnUI(); 
} 

private void DoWorkOnUI() 
{ 
    MethodInvoker methodInvokerDelegate = delegate()  
       { label1.Text = "Updated From UI"; }; 

    //This will be true if Current thread is not UI thread. 
    if (this.InvokeRequired) 
     this.Invoke(methodInvokerDelegate); 
    else 
     methodInvokerDelegate(); 
} 
+0

非常感謝,這非常棒,正是我一直在尋找的!我一直在嘗試使用Control.Invoke,但並不真正瞭解我在做什麼。 雖然有一個問題 - 我得到一個錯誤: 「'代表':標識符未找到」 謝謝! –

+0

@Luke您使用的是什麼版本的.Net? – iraSenthil