-4

このコードは古い投稿から取得しました

public delegate void Worker();
private static Thread worker;

public static void Init(Worker work)
{
    worker = new Thread(new ThreadStart(work));
    worker.Start();
}

public static void Work()
{
    string result = testing;
}

パラメーターを追加してコードを変更します。Init("AA") を呼び出そうとすると、「最適なオーバーロード メソッドには無効な引数があります」というエラーが表示されます。

以下は編集したコードです

    public delegate void Worker();
private static Thread worker;

public static void Init(Worker work)
{
    worker = new Thread(new ThreadStart(work));
    worker.Start();
}

public static void Work(string testing)
{
    string result = testing;
}
4

3 に答える 3

2

Initメソッドはデリゲートを取り、文字列を渡しているため、オーバーロードはありません。

あなたがしたい:Init(Work)

PS:あなたの問題はスレッド化とは何の関係もありません。

于 2012-12-17T09:29:03.697 に答える
0

問題は、デリゲートがパラメータWorkerを取ることを期待していることです。それstringを更新してから、パラメータを渡す必要があります。

public delegate void Worker(string str);
private static Thread worker;
public static void Init(Worker work)
{
    worker = new Thread(work);
    worker.Start("AA");
}
public static void Work(string testing)
{
    string result = testing;
}
于 2012-12-17T09:33:25.910 に答える
0

スレッドにデータを渡したい場合は、ParametrizedThreadStartまたは匿名メソッドを使用できます。

private static Thread worker;

public static void Init(string testing)
{
    // passing anonymous method, which will capture parameter
    worker = new Thread(() => Work(testing));
    worker.Start();
}

public static void Work(string testing)
{
    string result = testing;
}

private static Thread worker;

public static void Init(string testing)
{
    // passing PrametrizedThreadStart delegate
    worker = new Thread(Work);
    worker.Start(testing); // passing parameter
}

// PrametrizedThreadStart delegate accepts object as parameter
public static void Work(object testing)
{
    string result = (string)testing;
}
于 2012-12-17T09:31:10.183 に答える