[英]C# ParameterizedThreadStart not supported in Visual Studio 2003?
我在C#中做一個多線程應用程序,需要將一些參數傳遞給一個線程。
試圖使用ParameterizedThreadStart類,以便我可以傳遞一個類變量(包含我想傳遞的所有參數)。 但是,這個類似乎無法識別(在源代碼中它下面有一條紅線)並且在編譯時我得到了“無法找到類型或命名空間名稱ParameterizedThreadStart(你是否缺少using指令或程序集引用? )”。
我正在使用框架中的以下庫:using System; 使用System.Collections; 使用System.Threading;
我做錯了嗎? 我正在使用VS 2003(7.1.6030)和.NET Framework 1.1。
謝謝。
ParameterizedThreadStart
委托已添加到框架2.0中。
您可以使用對象中的方法啟動線程,然后線程可以訪問對象的成員,而不是將對象傳遞給線程。
例:
public class ThreadExample {
public int A, B;
public void Work() {
A += B;
}
}
ThreadExample thread = new ThreadExample();
thread.A = 1;
thread.B = 2;
new ThreadStart(thread.Work).Invoke();
這樣做的舊方法是編寫一個表示狀態的類,並將方法放在那里:
class MyState {
private int foo;
private string bar;
public MyState(int foo, string bar) {
this.foo = foo;
this.bar = bar;
}
public void TheMethod() {...}
}
...
MyState obj = new MyState(123,"abc");
ThreadStart ts = new ThreadStart(obj.TheMethod);
在.net framework 2.0之前,ParameterizedThreadStart類型不存在,但您可以完成相同的目標(將參數傳遞給線程)創建一個簡單的類並使用舊的ThreadStart委托,如下所示:
class ParamHolder
{
private object data;
public ParamHolder(object data) // better yet using the parameter(s) type
{
this.data = data;
}
public void DoWork()
{
// use data
// do work
}
}
並將使用:
...
object param = 10; // assign some value
Thread thread = new Thread(new ThreadStart(new ParamHolder(param).DoWork));
thread.Start();
...
需要.net 2.0,它是一個委托,而不是一個類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.