91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#下使用Invoke調用窗體控件

發布時間:2020-07-21 12:52:07 來源:網絡 閱讀:2717 作者:shengqin105 欄目:編程語言

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


之前為了這個在網上搜索了不少的文章,因為個人經驗不足,在Invoke跟delegate兩個東西的解釋上我就用了不少的時間,雖然仍然還沒弄明白,方法還是找到正解,舍去許多細枝末節(關于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();
    }
    //
    //線程函數
    public void LoopThread()
    {
        int i = 0;
        while (true)
        {
            string arg = "Count : " + i.ToString();
            //注意此處的參數傳遞的方法
            this.Invoke(new UiProcessFunction(UpdateLabel), new object[] { arg });
            this.label1.Text = "Count : " + i.ToString();
            Thread.Sleep(500);
            i++;
        }
    }
    //
    //更新標簽的內容
    public void UpdateLabel(object param)
    {
        this.label1.Text = (string)param;
    }
}


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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永昌县| 霍城县| 宁远县| 民权县| 富蕴县| 交城县| 乌苏市| 靖州| 武陟县| 永康市| 平利县| 阳高县| 青海省| 舒兰市| 鲁甸县| 平谷区| 文成县| 大足县| 安岳县| 比如县| 思茅市| 兴文县| 扶风县| 西乡县| 靖远县| 沙湾县| 蒙山县| 宁乡县| 新巴尔虎左旗| 利辛县| 永嘉县| 西贡区| 安康市| 汤阴县| 海林市| 清水河县| 花莲县| 伊川县| 龙陵县| 蛟河市| 宁明县|