使用参数启动线程

时间:2012-07-13 06:13:20

标签: c# multithreading parameter-passing abort

如果代码执行时间超过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) {
}

2 个答案:

答案 0 :(得分: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){.....}

答案 1 :(得分:0)

您需要创建一个包含2个int参数的类,然后使用ParametrizedThreadStart并传入您的对象