标签: backgroundworker

如何使用BeginInvoke从BackgroundWorker更新RichTextBox

我有一个小应用程序读取管道分隔文件并将行写入RTB,突出显示某些"列"中是否有不允许的字符.这是完美的工作......然而,用户想要一个进度条,并看到"现场"写的行,也能够在中途取消.

我有以下扩展方法,我一直用来写入RichTextBox,同时阻止UI,但这使用BackgroundWorker与BeginInvoke失败.

失败是找到文本的当前长度.

public static void AppendLine(this RichTextBox richTextBox, string text, List<Char> foundChars, List<int> columns)
        {
            var split = text.Trim().Split(new char[] { '|' });

            for (int i = 0; i < split.Count(); i++)
            {
                **var start = richTextBox.TextLength;**
                richTextBox.AppendText(split[i]);
                var end = richTextBox.TextLength;

                if (columns.Contains(i + 1))
                {
                    foreach (var foundChar in foundChars)
                    {
                        var current = start;

                        while (current > 0)
                        {
                            var position = richTextBox.Find(new char[] { foundChar }, current, end);
                            current = position + 1;
                            if (current …
Run Code Online (Sandbox Code Playgroud)

c# richtextbox backgroundworker winforms

2
推荐指数
1
解决办法
8955
查看次数

如何从BackgroundWorker返回列表以用于UI线程中的下一行代码?

我正在尝试编写运行BackgroundWorker执行耗时操作的进程的应用程序的一部分.在主线程中,计时器更新进度条(这是此问题的延续).但是,此代码显示没有MessageBoxes.foreach (String word in this.words)SearchButton_Click事件处理程序中的行上设置断点显示this.words没有值,即this.words.Count() == 0.

public partial class Form1 : Form
{
    System.Windows.Forms.Timer searchProgressTimer;
    List<String> words;

    public Form1()
    {
        InitializeComponent();

        words = new List<String>(3);
    }

    private void SearchDatabase_Click(object sender, EventArgs e)
    {
        this.searchProgressTimer.Start();
        SearchBackgroundWorker.RunWorkerAsync();

        foreach (String word in this.words) // BREAKPOINT HERE
            MessageBox.Show(word);
    }

    private void SearchBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
    {
        // Time-consuming operation
        String filename = @"http://www.bankofengland.co.uk/publications/Documents/quarterlybulletin/qb0704.pdf";
        WebClient webClient = new WebClient();
        webClient.DownloadFileAsync(new …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms

2
推荐指数
1
解决办法
3098
查看次数

如何在BackgroundWorker执行某些操作后正确隐藏按钮并显示它?

这是我到目前为止所尝试的:

  1. 放入button.Visible = false我的表单的初始化程序,并button.Visible = true结束我的ba​​ckgroundWorkers的DoWork事件.
    这会导致程序在BackgroundWorker完成其工作后冻结.
    我不明白为什么.

  2. 放入button.Visible = false我的表单的初始化程序并button.Visible = true在我的backgroundWorker1.RunWorkerAsync()调用之后.
    这不能正常工作,因为它在BackgroundWorker开始工作后立即显示按钮.
    我明白为什么会这样.

  3. button.Visible = falsedoneEvent = new AutoResetEvent(false)入我的窗体的初始化,然后把doneEvent.WaitOne()button.Visible = true我的后backgroundWorker1.RunWorkerAsync()调用.
    这样,一切正常,除了我的表单中的ProgressBar停止正常工作(直到完成所有工作才显示进度).
    我可能有一个直观的想法,为什么会发生这种情况,但我真的不明白它,我不知道如何解决它.

c# backgroundworker winforms

2
推荐指数
1
解决办法
735
查看次数

如何从后台工作器 C# 返回多个结果

我的Backgroundworker从路径中检索和计算,我需要返回一个字符串数组和一个double数组。如何将它们打包在一起?我知道返回一个结果是这样的:

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    int result = 2+2;
    e.Result = result;
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    int result = (int)e.Result;
    MessageBox.Show("Result received: " + result.ToString());
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用元组,但我的软件无法识别它,我使用的是 C# 2008 快速版。

如何将两种不同类型的数组打包在一起?

c# return backgroundworker

2
推荐指数
1
解决办法
2923
查看次数

在后台工作程序更改标签文本错误

我正在尝试在后台工作进程中更改表单上的标签但是它表示未处理的异常.我看了一下这个错误,它说要像接受的答案那样调用它:在后台工作者winforms中更新标签文本

我已经成功地改变了复选框列表中的值,但是我使用了相同的方法,并且对于它不会调用的标签,我在键入时在代码中得到红色错误行.

我的背景工作者:

private void bw2_DoWork(object sender, DoWorkEventArgs args)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    func.sshConnect();
    for (int num = 0; num < checklist.Items.Count; num++)
    {
        if (checklist.GetItemChecked(num))
        {
            string project = checklist.Items[num].ToString();
            lblStatus.Text = "Opening " + project + "..."; //error here
            if (func.svnCheckoutProject(project))
            {
                lblStatus.Text = project + " Opened"; //same error here
                func.sshRunCommand("echo " + project + " >> " + Properties.Settings.Default.serverUserFilesPath + Properties.Settings.Default.Username);
            }
            else
            {
                //error message
            }
        }
        worker.ReportProgress(num * (100 / …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms

2
推荐指数
1
解决办法
3623
查看次数

C# - 使用 BackgroundWorker.ReportProgress 使用自定义最大值更新 ProgressBar

我已经在这个主题上搜索了几天,但我没有遇到任何似乎相关的东西。请记住,我仍在学习如何在 C# 中使用 BackgroundWorker 和多线程。

我在使用 ReportProgress 方法时遇到问题。这是我正在做的一个小例子。

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
  if (!backgroundWorker1.CancellationPending)
  {
    // bunch of code for handling a multiple-page PDF file using Ghostscript.NET
    for (var pageNumber = 1; pageNumber <= pageCount; pageNumber++)
    {
      if (!backgroundWorker1.CancellationPending)
      {
        // get file path and file name, convert page to image file
        // after converting page to image file do:
        backgroundWorker1.ReportProgress(pageNumber); // Here is the problem
      }
      else
        e.Cancel = true;
      ...
    }
  }
}

private void …
Run Code Online (Sandbox Code Playgroud)

.net c# backgroundworker

2
推荐指数
1
解决办法
1万
查看次数

React-Native:在加载组件时在后台运行一个函数

在组件中,同时加载列表视图和所有内容。

是否可以在后台运行一个函数以每隔几分钟重新加载列表视图数据?

如果是,当用户离开组件(转到另一个选项卡,iOS)时,该功能会停止吗?

javascript backgroundworker web-worker react-native

2
推荐指数
1
解决办法
2912
查看次数

可以在现有的 ASPNET.Core Web 项目中调用和/或使用 Worker Service 吗?

我一直在阅读和学习 .Net Core 3.0 中提供的新 Worker Service 功能。我一直在使用 Microsoft 的此链接:后台任务与 ASP.NET Core 中的托管服务

我不明白的是,这些工作服务概念可以引入到现有的 ASPNET Web 项目中,例如 Razor Pages 站点吗?或者您必须创建一个新项目,然后使用主机操作系统为此提供的任何机制将该项目部署为服务?

backgroundworker .net-core asp.net-core

2
推荐指数
1
解决办法
493
查看次数

为什么 TApplication.MessageBox 会自动关闭?

我有一个需要几秒钟才能加载的应用程序(大量初始化)。GUI 在启动期间冻结。所以我想创建一个在应用程序加载时淡入淡出的启动画面。我使用TBackgroundWorker组件在后台线程中执行动画。

但是,当我使用这个组件时会发生一些奇怪的事情:当它发出“工作完成”的信号时(请参阅 BackgroundWorkerWorkComplete),同时我打开的消息对话框会自动关闭。

procedure TMainForm.ButtonStartSplashClick(Sender: TObject);
VAR
  frmSplash: TfrmSplash;
begin
 frmSplash:= TfrmSplash.Create(NIL);
 frmSplash.StartAnimation;

 //MessageBox(Handle, 'Hi', nil, MB_OK);   // This remains on screen
 Application.MessageBox(PChar('Hi'), PChar('Box'), MB_ICONINFORMATION); // This is automatically closed when the background thread is done
end;
Run Code Online (Sandbox Code Playgroud)

这是启动画面:

procedure TfrmSplash.StartAnimation;
begin
 Show;
 BackgroundWorker.Execute;
end;


procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action:= caFree;
end;


procedure TfrmSplash.BackgroundWorkerWork(Worker: TBackgroundWorker);
VAR i: Integer;
begin
  for i:= 1 to 255 DO
   begin
    AlphaBlendValue:= i; // do not access GUI directly from …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading splash-screen backgroundworker tform

2
推荐指数
1
解决办法
137
查看次数

ASP.NET Core Worker Service 中的依赖注入

我在 .NET Core Worker Service 中遇到了一些依赖注入问题。请参阅Program.cs文件中的以下代码。

public static void Main(string[] args)
{
    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Debug()
        .MinimumLevel.Override("Microsof)t", LogEventLevel.Warning)
        .Enrich.FromLogContext()
        .WriteTo.File(@"C:\MyApp_Log\Log.txt")
        .CreateLogger();

    try
    {
        Log.Information("Starting up the service.");
        CreateHostBuilder(args).Build().Run();
        return;
    }
    catch (Exception ex)
    {
        Log.Fatal(ex, "There was a problem starting the service");
        return;
    }
    finally
    {
        Log.CloseAndFlush();
    }

}
public static IHostBuilder CreateHostBuilder(string[] args)
{

    return Host.CreateDefaultBuilder(args)
        .UseWindowsService()
        .ConfigureServices((hostContext, services) =>
        {

            services.AddScoped<IMyAppCoreService, MyAppCoreService>();

            services.AddDbContext<MyAppCSContext>(options => options.UseSqlServer("Data Source=xx.xxx.xx.xxx;Database=Mydb;User ID = sa;Password=mypassword"));


            services.AddHostedService<Worker>();
        })
        .UseSerilog();
}
Run Code Online (Sandbox Code Playgroud)

请参阅下面的Worker.cs …

c# windows-services backgroundworker .net-core asp.net-core

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