Winform中使用委託實現跨執行緒安全呼叫控制元件

iDotNetSpace發表於2009-03-11

本來是個很簡單的東西,之前做專案也有碰到,但是每次遇到了都要重新去Google..

其實跨執行緒呼叫控制元件還有個更簡單的辦法,直接Control.CheckForIllegalCrossThreadCalls = false就好,可這樣是非安全的,所以大部分地方都不推薦使用。

這裡自己寫了個例子,讓自己這次就好好的把這個消化掉!
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtnamespace CrossThread
{
    
public partial class Form1 : Form
    {
        
public Form1()
        {
            InitializeComponent();
        }

        
//主執行緒點選按鈕事件
        private void btnSetLabel_Click(object sender, EventArgs e)
        {
            
try
            {
                
//在新執行緒中修改label的值
                Thread tdSetLabel = new Thread(new ThreadStart(SetLabel));
                tdSetLabel .Start();
            }
            
catch
            { 
            }
        }
        
//宣告一個委託
        private delegate void dlgateCrossThread(string labelText);

        
private void SetLabel(string text)
        {
            
if (labState.InvokeRequired)
            {
                dlgateCrossThreadrt 
= new dlgateCrossThread(SetLabel);
                
this.Invoke(rt,new Object(){text});
            }
            
else
            {
                labState.Text 
= text;
            }
        }

    }
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-566846/,如需轉載,請註明出處,否則將追究法律責任。

相關文章