如果代码执行时间超过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) {
}
答案 0 :(得分:0)
如果您使用.Net> = 4.0您也可以使用TPL
Task.Factory.StartNew(()=>LongRunningOperation(a,b));
<强> - 编辑 - 强>
根据您的编辑(回答)
更改您的代码如下
if (RunWithTimeout(new ParameterizedThreadStart(LongRunningOperation), TimeSpan.FromMilliseconds(3000)))
和
public static void LongRunningOperation(object ao){.....}
答案 1 :(得分:0)
您需要创建一个包含2个int参数的类,然后使用ParametrizedThreadStart并传入您的对象