繁体   English   中英

用C#创建线程

[英]Creating Threads in C#

我试图让一个线程在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循环放在我正在创建的线程中。 有谁知道如何做到这一点?

谢谢

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

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

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

如果在Thread构造函数中传递一个具有object参数的方法,C#将隐式创建一个ParameterizedThreadStart委托。 然后使用线程的.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);
    }
}

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM