用于在.NET/Windows窗体中执行长期运行操作的库?

用于在.NET/Windows窗体中执行长期运行操作的库?,.net,winforms,multithreading,concurrency,.net,Winforms,Multithreading,Concurrency,在.NET中是否有执行长时间运行的操作的库/框架?寻找这样的东西: private void button1_Click(...) { LongActionRunner.Execute((ref int total, ref int done) => { // i know it's not thread-safe total = 100; for(var i = 0; i <= 100; ++i) { done = i; Thre

在.NET中是否有执行长时间运行的操作的库/框架?寻找这样的东西:

private void button1_Click(...)
{
  LongActionRunner.Execute((ref int total, ref int done) => {
    // i know it's not thread-safe
    total = 100;
    for(var i = 0; i <= 100; ++i) {
      done = i;
      Thread.Sleep(100); // slow
    }
  });
}
private void按钮1\u单击(…)
{
LongActionRunner.Execute((ref int total,ref int done)=>{
//我知道这不是线程安全的
总数=100;
对于(var i=0;i您可以使用。它特别适用于您所介绍的场景。

有关如何使用BackgroundWorker实现进度条的教程,请参阅。

BackgroundWorker使用线程池线程,因此您应该仅将其用于相对(最多1秒)的工作单位。如果您的操作需要更长的时间,您应该创建一个线程


一、 我怀疑还有许多其他人是为商业项目写这篇文章的,但我不知道有任何开源解决方案。我同意你需要显示一个带有进度条的对话框,如果只是为了防止用户按两次按钮1导致重新进入。正如你所说,你还必须处理错误和取消。

那么progres呢s栏、错误处理等?只是不想自己编写代码。您仍然需要添加进度栏…但是backgroundworker有一个“progressChanged”事件,它会生成一个进度栏straightforward@loki2302-无论是哪种解决方案,您都必须自己编写所有代码。您能否提供“最多1秒”的引用索赔?多年来,我一直在使用在商业项目中花费数小时的Backgroundworker,没有任何问题。@Dour:这里有一个问题:在长时间运行的任务中使用线程池会混淆其线程管理算法