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 回答