2

コードの実行に 3 秒以上かかる場合は、スレッドを中止する必要があります。私は以下の方法を使用しています。

public static void Main(string[] args) {
    if (RunWithTimeout(LongRunningOperation, TimeSpan.FromMilliseconds(3000))) {
        Console.WriteLine("Worker thread finished.");
    } else {
        Console.WriteLine("Worker thread was aborted.");
    }
 }

public static bool RunWithTimeout(ThreadStart threadStart, TimeSpan timeout) {
    Thread workerThread = new Thread(threadStart);
    workerThread.Start();

    bool finished = workerThread.Join(timeout);
    if (!finished)
    workerThread.Abort();

    return finished;
}

public static void LongRunningOperation() {
    Thread.Sleep(5000);
}

パラメータを持つ関数に対して同じことを行う方法を教えてください。例えば:

public static Double LongRunningOperation(int a,int b) {
}
4

2 に答える 2

0

ParameterizedThreadStartを参照してください

.Net>=4.0 を使用している場合TPLも使用できます

Task.Factory.StartNew(()=>LongRunningOperation(a,b));

- 編集 -

あなたの編集ごとに(回答)

以下のようにコードを変更します

if (RunWithTimeout(new ParameterizedThreadStart(LongRunningOperation), TimeSpan.FromMilliseconds(3000)))

public static void LongRunningOperation(object ao){.....}
于 2012-07-13T06:18:04.560 に答える
0

2 つの int パラメーターを含むクラスを作成し、ParametrizedThreadStartを使用してオブジェクトを渡す必要があります

于 2012-07-13T06:18:27.960 に答える