用C#创建线程

时间:2010-08-05 14:01:21

标签: c# multithreading

我正在尝试使用C#中的线程来重置时间并在其旁边运行另一个函数。我的代码是:

Thread loopTime = new Thread(this.someFunction);
loopTime.Start();

for (int i = 0; i < 20; i++)
{
    ChangeTimeFunction(someTime);
    Thread.Sleep(200);
}

如果我传入this.SomeFunction(),我会收到线程错误。这不能根据Visual Studio使用。我可以将for循环作为一个线程,但我不知道如何传入变量someTime

如果它是一个函数或者在函数内调用for循环,是否有办法将变量传递给循环。

感谢您的帮助。

更新:

someFunction是使用Visual Studio记录的方法。这不能在主线程之外使用。我需要将for循环放在我正在创建的线程中。有谁知道怎么做?

由于

3 个答案:

答案 0 :(得分:4)

  

有没有办法要么通过   变量进入循环,如果它是一个   函数或调用for循环   在功能中。

.NET有两个用于启动线程的委托。第一个是ThreadStart,它只调用一个没有参数的方法。

第二个是ParameterizedThreadStart,它使用单个object作为参数调用方法。

如果在Thread构造函数中传递一个具有ParameterizedThreadStart参数的方法,则C#将隐式创建一个object委托。然后使用线程的.Start(Object)方法向其发送object

例如,要使for循环成为一个线程,假设someTime是DateTime并包含一个强制转换为该效果:

Thread loopTime = new Thread(someFunction);
loopTime.Start(someTime);

public void someFunction(object someTime) {
    for (int i = 0; i < 20; i++)
    {
        // Note the cast here... I assumed it's a DateTime
        ChangeTimeFunction((DateTime) someTime);
        Thread.Sleep(200);
    }
}

答案 1 :(得分:0)

我认为这个链接:http://msdn.microsoft.com/en-us/library/aa645740%28VS.71%29.aspx可以解释你需要做什么。似乎ThreadStart delaget将允许您在线程启动时传递一个函数来执行。

答案 2 :(得分:0)

这听起来不像“这个”限定词的问题。

你的someFunction是否接受参数?如果是,您可以:

  1. 使其无参数并通过成员字段传递数据
  2. 使用可以使用closure从外部作用域传递变量。

    int i = 2;
    Thread t = new Thread(x =>
                              {
                                  i++;                                      
                              });
    
    t.Start();