我正在尝试使用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循环放在我正在创建的线程中。有谁知道怎么做?
由于
答案 0 :(得分:4)
有没有办法要么通过 变量进入循环,如果它是一个 函数或调用for循环 在功能中。
.NET有两个用于启动线程的委托。第一个是ThreadStart
,它只调用一个没有参数的方法。
第二个是ParameterizedThreadStart
,它使用单个object
作为参数调用方法。
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是否接受参数?如果是,您可以:
使用可以使用closure从外部作用域传递变量。
int i = 2;
Thread t = new Thread(x =>
{
i++;
});
t.Start();