熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# 跨線程調用TextBox方法淺析

2013-11-13 09:59:57  來源: .NET編程 
    首先來看下面代碼
    主線程
    delegate void SetTextCallback(string text)
    private void SetText(string text)
    {
    if (thistextBoxInvokeRequired)
    {
    SetTextCallback d = new SetTextCallback(SetText)
    thisInvoke(d new object[] { text })
    }
    else
    {
    thistextBoxText = text;
    }
    }
    private void BtnMainThread_Click(object sender EventArgs e) //主線程調用textBox
    {
    thistextBoxText = Main Thread;
    }
    子線程
    private void BtnNewThread_Click(object sender EventArgs e) //子線程調用textBox
    {
    thisdemoThread = new Thread(new ThreadStart(thisNewThreadSet))
    thisdemoThreadStart()
    }
    private void NewThreadSet()
    {
    thisSetText(New Thread
    }
    首先需要對thistextBoxInvokeRequired返回值的解釋
    當主線程調用其所在的方法時返回False
    當子線程調用其所在的方法時返回True
    當單擊主線程調用textBox
    thistextBoxInvokeRequired的返回值為False
    直接執行else的代碼textBox中顯示Main Thread
    當單擊子線程調用textBox
    thistextBoxInvokeRequired的返回值為True
    執行
    SetTextCallback d = new SetTextCallback(SetText)
    thisInvoke(d new object[] { text })
    這兩句代碼其中Invoke的作用是在擁有控件的基礎窗口句柄的線程上用指定的參數列表執行指定委托
    a 在擁有控件的基礎窗口句柄的線程上就是指主線程
    b 指定的參數列表是指的參數text
    c 指定委托是指SetText方法
    這樣就很容易看出
    代碼執行到Invoke後就會把子線程的參數 New Thread 交給主線程去執行SetText方法此時由於是主線程調用SetText方法所以thistextBoxInvokeRequired的返回值為False直接執行else的代碼textBox中顯示New Thread
From:http://tw.wingwit.com/Article/program/net/201311/12241.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.