簡體   English   中英

Visual Studio 2003中不支持C#ParameterizedThreadStart?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM