真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#下使用Invoke調(diào)用窗體控件

這個問題事實上涉及了線程間的通訊問題,對了,這就需要delegate這個東西了。盡管可以通過某種方法可以在線程內(nèi)部調(diào)用WinForm主窗體的控件,但這不是安全的做法,在.NET2.0之后會提示“線程間操作無效”,而常規(guī)的做法是使用delegate的類型,通過異步機制調(diào)用主窗體的控件。

創(chuàng)新互聯(lián)成立與2013年,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站制作、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元習水做網(wǎng)站,已為上家服務,為習水各地企業(yè)和個人服務,聯(lián)系電話:028-86922220

之前為了這個在網(wǎng)上搜索了不少的文章,因為個人經(jīng)驗不足,在Invoke跟delegate兩個東西的解釋上我就用了不少的時間,雖然仍然還沒弄明白,方法還是找到正解,舍去許多細枝末節(jié)(關于C#的代理詳見度娘),簡單的使用例程如下所示:                          

//使用一個WinForm的應用程序
public partial class Form1 : Form
{
    //聲明代理
    private delegate void UiProcessFunction(object param);
    //
    //主窗體
    public Form1()
    {
        InitializeComponent();
        //開啟主線程
        Thread thread = new Thread(this.LoopThread);
        //后臺線程,不加此聲明的話會導致程序關閉錯誤
        thread.Is true;
         //開啟主線程
        thread.Start();
    }
    //
    //線程函數(shù)
    public void LoopThread()
    {
        int i = 0;
        while (true)
        {
            string arg = "Count : " + i.ToString();
            //注意此處的參數(shù)傳遞的方法
            this.Invoke(new UiProcessFunction(UpdateLabel), new object[] { arg });
            this.label1.Text = "Count : " + i.ToString();
            Thread.Sleep(500);
            i++;
        }
    }
    //
    //更新標簽的內(nèi)容
    public void UpdateLabel(object param)
    {
        this.label1.Text = (string)param;
    }
}

因為C#下Timer要拖控件,有時還是用Thread比較方便一點。以上代碼的運行環(huán)境是.NET4.5。


本文名稱:C#下使用Invoke調(diào)用窗體控件
本文來源:http://weahome.cn/article/jjdgdg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部