线程foreach循环的正确方法

问题描述 投票:2回答:1

在过去的30分钟里我一直在讨论这个问题,尝试编写一个简单的foreach循环,无论我做什么都会抛出一些错误(第一次不使用线程框架,所以我很可能会犯一些愚蠢的语法错误)

可悲的是,我不能使用qazxsw poi因为必须留下.net 3.5或以下...有人能告诉我正确的方法这样做,所以我可以回去不想尖叫!

伪代码

Parallel.For

编辑:MonoDevelop正在抛出以下错误

  1. 表达式表示值,其中期望类型或方法组
  2. System.Threading.Thread.Thread(System.Threading.ThreadStart)的最佳重载方法匹配有一些无效的参数,
  3. 参数#1无法将对象表达式转换为System.Threading.ThreadStart类型
c# multithreading for-loop foreach c#-3.0
1个回答
4
投票

首先,对于像这样的东西,你应该使用一个完整线程的较轻重量的ThreadPool intead。 (你也犯了一些转换错误,线程池版本使用与Thread相同的样式,所以你可以看到差异)

void SomeMethod
{
    foreach(Touch Input in Inputlist){
        Thread thread = new Thread(new ThreadStart(this.FilterInput(Input)));
        thread.Start();
    }
}
void FilterInput(Input UnFilteredInput){
....
}

但是我仍然担心每秒创建太多线程并且会建议某种阻塞来计算新线程的创建速率。

void SomeMethod
{
    foreach(Touch input in Inputlist){
        ThreadPool.QueueUserWorkItem(new WaitCallback(FilterInput), input);
    }
}
void FilterInput(object unCastUnFilteredInput){
    Touch UnFilteredInput = (Touch)unCastUnFilteredInput;
....
}
© www.soinside.com 2019 - 2024. All rights reserved.