C#中的多線程多參數(shù)傳遞詳解
之前做了一個(gè)小的應(yīng)用程序,用的是c#語言,涉及到了多線程的多參數(shù)傳遞,經(jīng)過查找資料總結(jié)了一下解決方案!
第一種解決方案的原理是:將線程執(zhí)行的方法和參數(shù)都封裝到一個(gè)類里面。通過實(shí)例化該類,方法就可以調(diào)用屬性來實(shí)現(xiàn)間接的類型安全地傳遞多個(gè)參數(shù)??慈缦麓a:
using System;
using System.Threading;
//ThreadWithState 類里包含了將要執(zhí)行的任務(wù)以及執(zhí)行任務(wù)的方法
public class ThreadWithState {
//要用到的屬性,也就是我們要傳遞的參數(shù)
private string boilerplate;
private int value;
//包含參數(shù)的構(gòu)造函數(shù)
public ThreadWithState(string text, int number)
{
boilerplate = text;
value = number;
}
//要丟給線程執(zhí)行的方法,本處無返回類型就是為了能讓ThreadStart來調(diào)用
public void ThreadProc()
{
//這里就是要執(zhí)行的任務(wù),本處只顯示一下傳入的參數(shù)
Console.WriteLine(boilerplate, value);
}
}
----------分隔線-----------
//用來調(diào)用上面方法的類,是本例執(zhí)行的入口
public class Example {
public static void Main()
{
//實(shí)例化ThreadWithState類,為線程提供參數(shù)
ThreadWithState tws = new ThreadWithState(
“This report displays the number {0}.”, 42);
// 創(chuàng)建執(zhí)行任務(wù)的線程,并執(zhí)行
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
t.Start();
Console.WriteLine(“Main thread does some work, then waits.”);
t.Join();
Console.WriteLine(
“Independent task has completed; main thread ends.”);
}
}
從上面的例子就能很清楚的得到我們想要的結(jié)果,注意這句代碼的用法:
Thread t = new Thread(new ThreadStart(tws.ThreadProc));
第二種解決方案的原理是把多個(gè)參數(shù)封裝成object來傳遞,然后在線程里使用時(shí)拆箱即可,看如下代碼:
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ThreadMethod);
Thread myThread = new Thread(ParStart);
object o = “hello”;
myThread.Start(o);
ThreadMethod如下:
public void ThreadMethod(object ParObject)
{
//程序代碼
}
相關(guān)文章
C#實(shí)現(xiàn)文件壓縮與解壓的方法示例【ZIP格式】
這篇文章主要介紹了C#實(shí)現(xiàn)文件壓縮與解壓的方法,結(jié)合具體實(shí)例形式分析了C#針對文件進(jìn)行zip格式壓縮與解壓縮的相關(guān)操作技巧,需要的朋友可以參考下2017-06-06Unity實(shí)現(xiàn)跑馬燈抽獎(jiǎng)效果
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)跑馬燈抽獎(jiǎng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02C#使用is、as關(guān)鍵字以及顯式強(qiáng)轉(zhuǎn)實(shí)現(xiàn)引用類型轉(zhuǎn)換
這篇文章介紹了C#使用is、as關(guān)鍵字以及顯式強(qiáng)轉(zhuǎn)實(shí)現(xiàn)引用類型轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08詳細(xì)聊聊C#的并發(fā)機(jī)制優(yōu)秀在哪
并發(fā)其實(shí)是一個(gè)很泛的概念,字面意思就是"同時(shí)做多件事",不過方式有所不同,下面這篇文章主要給大家介紹了關(guān)于C#并發(fā)機(jī)制的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02C# 復(fù)制與刪除文件的實(shí)現(xiàn)方法
這篇文章主要介紹了C# 復(fù)制與刪除文件的實(shí)現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10C#實(shí)現(xiàn)判斷操作系統(tǒng)是否為Win8以上版本
這篇文章主要介紹了C#實(shí)現(xiàn)判斷操作系統(tǒng)是否為Win8以上版本,本文講解了利用C#獲取OS的版本號、利用反射獲取當(dāng)前正在運(yùn)行的程序的版本信息、 利用C#判斷當(dāng)前操作系統(tǒng)是否為Win8系統(tǒng)等內(nèi)容,需要的朋友可以參考下2015-06-06Python設(shè)計(jì)模式編程中的備忘錄模式與對象池模式示例
這篇文章主要介紹了Python設(shè)計(jì)模式編程中的備忘錄模式與對象池模式,文中分別舉了表單和線程的相關(guān)示例,需要的朋友可以參考下2016-02-02