程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 在C#中主線程和子線程如何實現互相傳遞數據

在C#中主線程和子線程如何實現互相傳遞數據

編輯:C#入門知識

在C#中主線程和子線程如何實現互相傳遞數據


在C#中主線程和子線程如何實現互相傳遞數據
老帥
在C#中創建線程Thread時,可以有多種方法,而主線程和子線程之間又如何實現互相傳遞數據,每種創建方法傳遞參數的效果是不同的,逐一看一下:
一、不帶參數創建Thread 1234567891011121314151617181920212223using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ATest { class A { public static void Main() { Thread t = new Thread(new ThreadStart(A)); t.Start(); Console.Read(); } private static void A() { Console.WriteLine("不帶參數 A!"); } } }

結果顯示“不帶參數 A!”


二、帶一個參數創建Thread

由於ParameterizedThreadStart要求參數類型必須為object,所以定義的方法B形參類型必須為object。

123456789101112131415161718192021222324using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace BTest { class B { public static void Main() { Thread t = new Thread(new ParameterizedThreadStart(B)); t.Start("B"); Console.Read(); } private static void B(object obj) { Console.WriteLine("帶一個參數 {0}!",obj.ToString ()); } } }

結果顯示“帶一個參數 B!”

三、帶多個參數創建Thread

由於Thread默認只提供了這兩種構造函數,如果需要傳遞多個參數,可以基於第二種方法,將參數作為類的屬性傳給線程。

1234567891011121314151617181920212223242526272829303132using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace CTest { class C { public static void Main() { MyParam m = new MyParam(); m.x = 6; m.y = 9; Thread t = new Thread(new ThreadStart(m.Test)); t.Start(); Console.Read(); } } class MyParam { public int x, y; public void Test() { Console.WriteLine("x={0},y={1}", this.x, this.y); } } }

結果顯示“x=6,y=9”

四、利用回調函數給主線程傳遞參數
我們可以基於方法三,將回調函數作為類的一個方法傳進線程,方便線程回調使用。1234567891011121314151617181920212223242526272829303132using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace CTest { class C { public static void Main() { MyParam m = new MyParam(); m.x = 6; m.y = 9; m.callBack = ThreadCallBack; Thread t = new Thread(new ThreadStart(m.Test)); t.Start(); Console.Read(); } }
private void ThreadCallBack(string msg) { Console.WriteLine("CallBack:" + msg); } private delegate void ThreadCallBackDelegate(string msg);
class MyParam { public int x, y; public ThreadCallBackDelegate callBack; public void Test() { callBack("x=6,y=9"); } } }結果顯示“CallBack:x=6,y=9”

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved