2

リスト内の各プログラムのスレッドを作成するループを作成しようとしていますが、以下のコードで境界を渡すと「メソッド名が必要です」というエラーが発生します。

for (i = 0; i <= programs.Count; i++)
{
    checkProcess check = new checkProcess();
    // check.isRunning();

    string filename = programs[i].Filename;
    string filepath = programs[i].Filepath;

    mWorkerThread = new Thread(new ThreadStart(check.isRunning(filename, filepath)));

    mWorkerThread.Start();
}

デリゲートについて少し読んだのですが、私の問題のコンテキストでデリゲートを機能させることができなかったようです。私がどの方向に向かうべきかについて、どんな助けでも大歓迎です。

4

2 に答える 2

12

スレッド ターゲットは、メソッドの結果ではなく、実行可能なものである必要があります。

mWorkerThread = new Thread(new ThreadStart(check.isRunning(filename, filepath)));

上記の場合ThreadStart、 の戻り値での新しいインスタンスを作成しようとしていますcheck.IsRunning(...)。あなたが欲しいのは次のようなものです

mWorkerThread = new Thread( () => check.isRunning(filename, filepath) );
于 2012-04-16T14:59:09.780 に答える
2

ステートメントmWorkerThread = new Thread(new ThreadStart(check.isRunning(filename, filepath))); check.isRunningでは、スレッドの開始時に呼び出されたメソッド名です。

Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start("My Parameter");

// method that will be called
    private void ThreadMethod(object parameter)
    {
        // parameter equals to "My Parameter"
    }

別の期待は、ラムダ式を使用してメソッドをインラインにする匿名デリゲートメソッドです。

   Thread t = new Thread(new ThreadStart(()=>ThreadMethod(parmaValue) ));
    t.Start("My Parameter");

参照: パラメータ付き ThreadStart

于 2012-04-16T15:11:54.597 に答える