最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實(shí)現(xiàn)跨線程操作控件方法

 更新時間:2014年10月20日 09:30:12   投稿:shichen2014  
這篇文章主要介紹了C#實(shí)現(xiàn)跨線程操作控件方法,主要采用異步訪問方式實(shí)現(xiàn),需要的朋友可以參考下

本文實(shí)例講述了C#實(shí)現(xiàn)跨線程操作控件方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

由于在.net平臺下Winform、wpf禁止跨線程直接訪問控件,因此在必須跨線程訪問控件的時候采用異步方式。

1、winform項目中跨線程訪問控件:

編寫一個Winform小實(shí)例:在做winform項目中,有時為了將系統(tǒng)運(yùn)行的狀態(tài)實(shí)時顯示到Form中,因此添加一個RichTextbox控件實(shí)時顯示系統(tǒng)運(yùn)行日志。本例實(shí)現(xiàn)的操作是將日志以字符串的形式寫入RichTextbox控件,因為是實(shí)時顯示,所以涉及到跨線程輸入的問題。

復(fù)制代碼 代碼如下:
private delegate void setRichTexBox(string s);
public void setText(string txt)
{
    if (this.t_revmsg.InvokeRequired)//等待異步
    {
 setRichTexBox fc = new setRichTexBox(Set);
 this.Invoke(fc, new object []{ txt});
    }
    else
    {
 this.t_revmsg.AppendText(txt);
    }
}

private void Set(string txt)
{
    t_revmsg.AppendText(txt);
}

控件的InvokeRequired的值為true時,說明有一個不屬于創(chuàng)建它的線程要訪問它,此時需要采用異步的方式進(jìn)行操作。

2、wpf項目中跨線程訪問控件:

wpf的page頁中,加入一個button控件和textbox控件,點(diǎn)擊button實(shí)現(xiàn)添加textbox控件中的內(nèi)容。

復(fù)制代碼 代碼如下:
private void button2_Click(object sender, RoutedEventArgs e)
{
    this.textBox1.Dispatcher.Invoke(new WriteDelegate(WriteMethod), "asdf");
}

private delegate void WriteDelegate(string str);
private void WriteMethod(string str)
{
    this.textBox1.AppendText(str);

}

3、wpf項目中跨線程獲取textbox控件中的內(nèi)容

本實(shí)例實(shí)現(xiàn)的功能是:點(diǎn)擊button控件,開啟socket監(jiān)聽服務(wù)。監(jiān)聽的端口需要從UI界面中的textbox中獲取,因為不是創(chuàng)建它的線程訪問它,因此才有Dispatcher.Invoke異步操作。稍作補(bǔ)充:在開啟監(jiān)聽的過程中,有while(true)死循環(huán),將其直接放入到主線程都會導(dǎo)致線程無法正常進(jìn)行下去,解決方法是開啟一個新的線程來開啟監(jiān)聽。

復(fù)制代碼 代碼如下:
private void button1_Click(object sender, RoutedEventArgs e)
{
    Thread thread = new Thread(new ThreadStart(StartServer));
    thread.Start();
}

public void StartServer()
{
    int port = Convert.ToInt32(GetText(this.tbPort));
    ServerSocket serverSocket = new ServerSocket(port);
    serverSocket.Start();
}

private delegate string GetTextHandle(Control control);
private string GetText(Control control)
{
    if (this.Dispatcher.Thread != System.Threading.Thread.CurrentThread)
    {
 return (string)this.Dispatcher.Invoke(new GetTextHandle(this.GetText), control);
    }
    else
    {
 if (control.GetType() == typeof(TextBox))
 {
     return ((TextBox)control).Text;
 }
 else
 {
     return string.Empty;
 }
    }
}

總結(jié):

由上述幾個實(shí)例可以看到跨線程調(diào)用需要使用Invoke和BeginInvoke(暫時沒有用到),在一些要求并不是很嚴(yán)格的系統(tǒng)中,暫且認(rèn)為二者是可以通用的。感興趣的朋友可以測試運(yùn)行一下。通過實(shí)踐會收獲的更多!

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • c#中判斷類是否繼承于泛型基類

    c#中判斷類是否繼承于泛型基類

    這篇文章主要介紹了c#中判斷類是否繼承于泛型基類,最簡單的辦法肯定是typeof(b).baseType=typeof(a<string>)這樣就可以返回true,但是這種方法時不妥的,下面看看如何解決這個問題呢
    2022-04-04
  • C#程序終極調(diào)試實(shí)現(xiàn)windbg的時間旅行

    C#程序終極調(diào)試實(shí)現(xiàn)windbg的時間旅行

    這篇文章主要介紹了C#程序終極調(diào)試實(shí)現(xiàn)windbg的時間旅行示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C#獲取任務(wù)欄顯示進(jìn)程的方法

    C#獲取任務(wù)欄顯示進(jìn)程的方法

    這篇文章主要介紹了C#獲取任務(wù)欄顯示進(jìn)程的方法,涉及C#針對進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#使用ffmpeg實(shí)現(xiàn)將圖片保存為mp4視頻

    C#使用ffmpeg實(shí)現(xiàn)將圖片保存為mp4視頻

    FFmpeg是一個開源的跨平臺多媒體處理工具,它提供了強(qiáng)大的功能,包括頻和視頻編碼、解碼、轉(zhuǎn)碼等,本文我們將使用FFmpeg實(shí)現(xiàn)將圖片保存為mp4視頻,感興趣的可以了解下
    2024-11-11
  • C#關(guān)于Task.Yeild()函數(shù)的討論

    C#關(guān)于Task.Yeild()函數(shù)的討論

    這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#實(shí)現(xiàn)上位機(jī)的遠(yuǎn)程監(jiān)控與控制的詳細(xì)步驟

    C#實(shí)現(xiàn)上位機(jī)的遠(yuǎn)程監(jiān)控與控制的詳細(xì)步驟

    隨著工業(yè)自動化、物聯(lián)網(wǎng)以及智能控制系統(tǒng)的普及,遠(yuǎn)程監(jiān)控與控制逐漸成為了許多系統(tǒng)的核心需求,上位機(jī)作為控制與監(jiān)測系統(tǒng)的核心,常用于接收處理來自下位機(jī)的數(shù)據(jù)并進(jìn)行控制操作,C#作為一門高效且功能強(qiáng)大的編程語言,本文將探討如何使用C#實(shí)現(xiàn)上位機(jī)遠(yuǎn)程監(jiān)控與控制
    2025-01-01
  • C#繪制柱狀圖和折線圖的方法

    C#繪制柱狀圖和折線圖的方法

    這篇文章主要為大家詳細(xì)介紹了C#繪制柱狀圖和折線圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 詳解C# partial 關(guān)鍵字的使用

    詳解C# partial 關(guān)鍵字的使用

    局部類型允許我們將一個類、結(jié)構(gòu)或接口分成幾個部分,分別實(shí)現(xiàn)在幾個不同的.cs文件中。接下來通過本文給大家分享C# partial 關(guān)鍵字的使用,感興趣的的朋友一起看看吧
    2017-08-08
  • 解析StreamReader與文件亂碼問題的解決方法

    解析StreamReader與文件亂碼問題的解決方法

    本篇文章是對StreamReader與文件亂碼問題的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C# Datatable的幾種用法小結(jié)

    C# Datatable的幾種用法小結(jié)

    這篇文章主要介紹了C# Datatable的幾種用法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

翁源县| 栾川县| 井冈山市| 正镶白旗| 衡南县| 西安市| 凌源市| 锡林浩特市| 诸城市| 大庆市| 奉新县| 井研县| 云梦县| 新余市| 湟中县| 乐至县| 怀安县| 彭州市| 应城市| 平利县| 云龙县| 阳新县| 呼图壁县| 广灵县| 建昌县| 新邵县| 五原县| 万安县| 清镇市| 来宾市| 福贡县| 尉犁县| 安国市| 贺兰县| 新绛县| 新乐市| 赞皇县| 天长市| 定结县| 东乡县| 红桥区|