标签: backgroundworker

使用backgroundworker的多种长方法的最佳实践

我有一个有很多长方法的表单.我的任务是:最佳做法是什么?使用匿名方法和只有一个backgroundworker或为每个long方法创建BackgroundWorker实例.

请帮忙.谢谢.

c# backgroundworker winforms

7
推荐指数
1
解决办法
1967
查看次数

背景工人在午夜时检查?

我想为WinForm创建一个后台工作程序,每当午夜滚动时触发代码.

我知道如何做到这一点,但我很确定这不是最好的方法.

while(1==1)
{
//if Datetime.Now == midnight, execute code
//sleep(1second)
}
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms

7
推荐指数
2
解决办法
4016
查看次数

何时自行使用BackgroundWorker或Manage线程?

可能重复:
BackgroundWorker与后台线程

我应该何时考虑自己管理线程而不是使用BackgroundWorker?

我知道自己管理线程可能很困难并且可能导致问题,管理它们有直接的好处吗?

.net multithreading backgroundworker thread-safety

7
推荐指数
1
解决办法
3005
查看次数

编写轮询Windows服务

我通常在C#中编写Windows服务,但我在F#中使用它.对于像这样的轮询服务,我通常使用我写的类,类似于BackgroundWorker.它产生一个后台线程并定期触发OnWork方法.(完整代码在这里[github].)

在F#中有另一种,或许更好或更惯用的方法吗?它可能是编写轮询后台工作者类或内置替代方法的更好方法.

编辑

根据乔尔的建议,这就是我提出的问题.

module Async =
  open System.Diagnostics

  let poll interval work =
    let sw = Stopwatch()
    let rec loop() =
      async {
        sw.Restart()
        work()
        sw.Stop()
        let elapsed = int sw.ElapsedMilliseconds
        if elapsed < interval then
          do! Async.Sleep(interval - elapsed)
        return! loop()
      }
    loop()

//Example
open System.Threading
let cts = new CancellationTokenSource()
Async.Start(Async.poll 2000 (fun () -> printfn "%A" DateTime.Now), cts.Token)
Thread.Sleep(TimeSpan.FromSeconds(10.0))
cts.Cancel()
Run Code Online (Sandbox Code Playgroud)

该服务使用poll:

type MyService() =
  inherit System.ServiceProcess.ServiceBase()

  let …
Run Code Online (Sandbox Code Playgroud)

f# windows-services backgroundworker

7
推荐指数
1
解决办法
1077
查看次数

C#后台工作者更新状态标签

这应该是一件相当简单的事情; 但是,我一直无法弄清楚这一点.

/// This section is located in the InitializeComponent() method
/// form's class, i.e. partial class frmMain { .... }
this.bgw = new System.ComponentModel.BackgroundWorker();
this.bgw.WorkerReportsProgress = true;
this.bgw.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgw_DoWork);
this.bgw.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.bgw_ProgressChanged);

/// This code is located in public partial class frmMain : Form { .... }
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    for (int i = 1; i <= 100; i++)
    {
        Thread.Sleep(100); // Wait 100 milliseconds
        //Console.WriteLine(i);
        bgw.ReportProgress(i);
    }
}
private void bgw_ProgressChanged(object …
Run Code Online (Sandbox Code Playgroud)

c# label backgroundworker winforms

7
推荐指数
1
解决办法
5882
查看次数

BackgroundWorker的IsBusy与"IsAlive"相同吗?

我试图找出一种方法来验证BackgroundWorker线程是否存活(即仍在运行.该线程基本上是作为一个简单的无限循环实现的:

while (AllConditionsMet())
{
  DoSomeMagic();
  Thread.Sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)

IsAlive()到目前为止我发现的最接近的是IsBusy属性,但考虑到我的线程Sleep()大部分时间,我不确定这是否能完成这项工作.

我可以依靠IsBusy来做:

if (!myWorker.IsBusy)
  RestartWorker();
Run Code Online (Sandbox Code Playgroud)

还是我在招惹麻烦?

c# .net-4.0 watchdog backgroundworker winforms

7
推荐指数
2
解决办法
7738
查看次数

线程调试窗口中没有显示任何线程

我试图跟踪我的BackgroundWorker线程,如本文所述,线程调试Windows是空的:

在此输入图像描述

是的,我正在调试.

我错过了什么?

c# backgroundworker visual-studio-2010 visual-studio winforms

7
推荐指数
1
解决办法
1811
查看次数

关闭表单时仍在运行的后台工作程序会发生什么?

或者问题的另一个方面是:我是否应该在编写后台工作人员时处理表单被关闭的可能性?

例如,我有一个代码,它在后台工作程序中执行SQL查询(不可取消),然后在日历控件中完成"加粗"日期以匹配查询返回的日期.

我很好奇背景工作者在这种情况下的目的是什么?- 不要开火RunWorkerComplete吗?- 忽略RunWorkerComplete函数调用中对话框的调用,因为它不再是一个窗口了?

c# backgroundworker winforms

7
推荐指数
1
解决办法
854
查看次数

取消长时间操作的最佳方法是什么?

我遇到了一个我不确定如何解决的问题.我有一个方法,其中包含来自填充数据表的服务的调用,例如:

private void GetCases()
{
    try
    {
        //Setup our criteria
        Web_search_criteria myCriteria = new Web_search_criteria()
        {
            Keynum = 9, //Use Opening Date Key
            Range_start = "20100101", //01-01-2010
            Range_end = "20121223" //12-23-2013
        };


        //The myCases object is a datatable that is populated from the GetCasesDT() call.
        int status = db.server.GetCasesDT(myCriteria, ref myCases);
    }
    catch (Exception ex)
    {
        XtraMessageBox.Show("Unable to get data: " + ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,正如你所看到的,我没有办法一次抓住几个案例 - 它只是抓住了一切.

现在,我在BackgroundWorker的DoWork事件中调用了这个方法,并在其上显示另一个带有选取框进度条的表单,以便用户知道系统实际上正在执行某些操作.在那个表单上,我有一个我订阅的取消按钮.这是执行此操作的代码:

    backgroundWorker1 = new BackgroundWorker() 
    { 
        WorkerSupportsCancellation = true,
        WorkerReportsProgress = true …
Run Code Online (Sandbox Code Playgroud)

c# multithreading process backgroundworker

7
推荐指数
1
解决办法
234
查看次数

cron 作业会阻塞主进程还是 nodejs 会创建一个工作程序来执行 cron 任务

我每分钟都在使用node-cron做一些繁重的任务(更新数据库)。这个任务是使用主进程来工作还是 nodejs 会创建一些工人来完成这些任务?

var CronJob = require('cron').CronJob;
new CronJob('0 * * * * *', function() {
  //Update database every minute here
  console.log('Update database every minute');
}, null, true, 'America/Los_Angeles');
Run Code Online (Sandbox Code Playgroud)

cron process backgroundworker node.js cron-task

7
推荐指数
2
解决办法
3172
查看次数