标签: backgroundworker

C#BackGroundWorker Anomaly DoWork事件未触发

这是我的设置,此代码正常工作

private void butGo_Click(object sender, EventArgs e)
{
  threadCreateImages.RunWorkerAsync();
}


private void threadCreateImages_DoWork(object sender, DoWorkEventArgs e)
{
  PatientToHL7MSHManager tvPatientToHL7MSHManager = new PatientToHL7MSHManager();
  tvPatientToHL7MSHManager.LoadByMSHID(""); 
}


private void threadCreateImages_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  MessageBox.Show("DONE"); 
}
Run Code Online (Sandbox Code Playgroud)

如果我更改此行tvPatientToHL7MSHManager.LoadByMSHID(""); to tvPatientToHL7MSHManager.LoadByPatientID("");

它跳过DoWork事件并直接进入RunWorkerCompleted事件.

除了代码路径相同之外,LoadByMSHID和LoadByPatientID之间的唯一区别是SQL语句上的过滤器.

没有后台线程,代码可以正常工作.

任何想法或建议将非常感激.

c# multithreading backgroundworker

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

一次将作业分配给BackgroundWorker线程

我的silverlight应用程序从webservice(async)获取文件集.webservice方法接受文件名数组并返回文件集(也作为数组).silverlight客户端对文件集提出了几个这样的请求.

客户端立即向Web服务发出许多请求.我需要一个 BackgroundWorker线程在客户端处理接收到的文件集 一前一后.

如何在收到所有文件集时收集它们,并将这些集合BackgroundWorker一次一个地提供给线程.

编辑:我无法运行多个BackgorundWorkers,因为文件集处理模块不是线程安全的.

.net c# silverlight backgroundworker

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

BacgroundWorkerCompleted不执行

使用C#.NET 4.0

我正在尝试使用BackgroundWorker来检索远程计算机上的服务列表.这是作为后台工作程序运行的,因此UI在等待信息时保持响应.

我的方法是将信息请求放在后台工作程序的_DoWork方法中,并使用ManualResetEvent.Set()来指示信息已被处理.应该在_RunWorkerCompleted方法中设置ManaualResetEvent._RunWorkerCompleted永远不会执行.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.ServiceProcess;
using System.Threading;
using System.Diagnostics;

namespace DemoTest
{

    public partial class Form1 : Form
    {
        List<ServiceController> MyBox1Services;

        ManualResetEvent MyBox1ServicesObtained = new ManualResetEvent(false);


        public Form1()
        {
            InitializeComponent();

        }



        private void button1_Click(object sender, EventArgs e)
        {

            // Use background worker to get the list of services in the background
            BackgroundWorker MyBox1Servicess = new BackgroundWorker();
            MyBox1Servicess.DoWork += new DoWorkEventHandler(bwGetMyBox1Services_DoWork);
            MyBox1Servicess.RunWorkerCompleted += new RunWorkerCompletedEventHandler(MyBox1Servicess_RunWorkerCompleted);




            MyBox1Servicess.RunWorkerAsync();

            // Wait until all the services …
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker

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

我的后台工作人员完成后,我想更改表单上的标签.我应该在哪里添加此代码?

后台工作程序完成其过程后,我想更改表单上某些标签上的文本.

这是触发后台工作者的按钮:

private void btnProcessImages_Click(object sender, EventArgs e)
        {
            DialogResult processImagesWarnMsg = MessageBox.Show("You're about to process images, are you sure?", "Warning!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);

            if (processImagesWarnMsg == DialogResult.Yes)
            {
                DisableAllButtons();

                if (!processImagesWorker.IsBusy)
                {
                    processImagesWorker.RunWorkerAsync();
                }
                //The problem here is that the below will run BEFORE the worker is complete. Where should I place the below method in my code? 
                //ResetDirectoryStatistics();
            }
        }
Run Code Online (Sandbox Code Playgroud)

这是更改表单上标签文本的方法:

private void ResetDirectoryStatistics()
        {
            lblSelectedDirectory.Text = "N/A";
            lblTotalNumberOfFilesInDirectory.Text = "N/A";
            lblTotalNumberOfSupportedFilesInDirectory.Text = "N/A";
            lblTotalNumberOfUnsupportedFilesInDirectory.Text = "N/A";
            lblTotalNumberOfPoliciesInDirectory.Text …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker

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

使用COM对象的后台工作者仍然锁定UI

所以我不知道如何提出这个问题,可能是我在任何地方找到问题的原因之一.

所以我的设置是我有一堂课

public class Connection
{
    public static event EventHandler LogggedIn;
    public static TDConnection TDC {get;set;}
    public string Authenticate(){...}
    public static void Login()
    {
        if (Connection.TDC.Connected)
        {
            _bw = new BackgroundWorker
            {
                WorkerReportsProgress = true,
                WorkerSupportsCancellation = true
            };
            _bw.DoWork += ConnectToProject_DoWork;
            _bw.RunWorkerCompleted += ConnectToProject_RunWorkerCompleted;

            _bw.RunWorkerAsync(Connection.TDC);
        }
    }

    private static void ConnectToProject_DoWork(object o, DoWorkEventArgs e)
    {
        Connection.TDC.ConnectProjectEx(Connection.Domain, Connection.Project, Connection.UserName, Utilities.Encryption.AESEncryption.Decrypt(Connection.Password, "fsd*#(dfs(((>>>???fdjs"));
    }

    private static void ConnectToProject_RunWorkerCompleted(object o, RunWorkerCompletedEventArgs e)
    {
        LogggedIn(null, new EventArgs());
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的主类中,我实例化一个新的Connection并调用Login,它在TDConnection中打开一个与ALM的新连接.在我的线程中,我想在我的线程中使用这个已经打开的连接.根据我的阅读,如果我这样做,我的UI将阻止因为我在UI线程上使用成员的方法,即使我在后台工作者内部.

我发现这样做的一个解决方案:

private static void …
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker alm threadpool

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

c#在另一个线程上更改表单字符串

我的代码更改了导航栏项的标题:

OverviewOrgan_NavBarHelper cNavBarHelper = new OverviewOrgan_NavBarHelper(Organization);

foreach (NavBarItem item in GetNavigationBar.Items)
{                       
    string cCaption = cNavBarHelper.UpdateNavBarItemCaption(item);
    item.Caption = cCaption;
}
Run Code Online (Sandbox Code Playgroud)

现在它在主线程上,但我必须将它移动到另一个线程.我知道UI不应该从另一个威胁改变,然后它就会被创建,所以我想到了使用BackgroundWorker.事实上,我不是在使用线程,有人可以为我的任务提出最佳解决方案吗?

c# multithreading backgroundworker

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

VB.net将值设置为backgroundworker中的标签

我的代码有效,但我怀疑我做了什么,因为我将CheckForIllegalCrossThreadCalls设置为false,我认为这会给我的后台工作者带来一些副作用.这是我的示例代码:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False

End Sub

Private Sub go_Click(sender As Object, e As EventArgs) Handles go.Click

    Try
        If BackgroundWorker1.IsBusy <> True Then
            BackgroundWorker1.RunWorkerAsync()
            resetevent.Set()
        End If

    Catch ex As Exception

    End Try

End Sub


Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork

    Do

    Label1.Text = x
Label2.Text = Label1.Text
Label3.Text = Label2.Tex
Label4.Text = Label3.Text
Label5.Text = Label4.Text

    x+=1
    Loop While (x < 100)


End Sub

Private Sub …
Run Code Online (Sandbox Code Playgroud)

vb.net backgroundworker

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

BackgroundWorker仍然冻结UI

我有以下代码,你可以看到后台工作程序搜索文件,并且在进度中更改了事件文件被添加到listview,但是由于有很多文件被添加到listview,UI变得没有响应,我可以睡在循环中的线程,但我不认为这是一个很好的做法,什么是防止UI冻结的最佳方法?

为了详细说明,listview是表单上的表单控件.

void bg_DoWork(object sender, DoWorkEventArgs e)
{
    Stack<string> dirs = new Stack<string>(20);
    dirs.Push(e.Argument.ToString());
    while (dirs.Count > 0)
    {
        string currentDir = dirs.Pop();
        string[] subDirs;
        try { subDirs = System.IO.Directory.GetDirectories(currentDir); }
        catch (UnauthorizedAccessException) { continue; }
        catch (System.IO.DirectoryNotFoundException) { continue; }

        string[] files = null;
        try { files = System.IO.Directory.GetFiles(currentDir); }

        catch (UnauthorizedAccessException) { continue; }
        catch (System.IO.DirectoryNotFoundException) { continue; }
        foreach (var file in files) { bg.ReportProgress(0, file); }
        foreach (string str in subDirs) { dirs.Push(str); }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# user-interface backgroundworker

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

铁路4:实施shoryuken后台流程宝石

我只是试图实现一个后台进程(第一次),我正在寻找一个廉价的解决方案,我发现这个宝石shoryuken,但没有足够的材料关于它的设置,你知道一个教程或博客文章显示shoryuken在行动?你可以给我的任何材料都会很好我在谷歌做了深入的研究,但找不到任何有用的...

ruby ruby-on-rails backgroundworker background-process ruby-on-rails-4

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

使用事件从另一个类的后台工作者更新UI

我正在尝试使用事件来更新来自不同类的后台工作程序的文本框.

除了我正在使用VB.NET之外,这个SO帖子中提到的问题也是如此.我正在尝试通过@ sa_ddam213实现第二个建议的解决方案.

我收到一个错误:"跨线程操作无效:控制'txtResult'从其创建的线程以外的线程访问."

这是我的代码:

Public Class DataProcessor
    Public Delegate Sub ProgressUpdate(ByVal value As String)
    Public Event OnProgressUpdate As ProgressUpdate

    Private Sub PushStatusToUser(ByVal status As String)
        RaiseEvent OnProgressUpdate(status)
    End Sub

    Public Sub ProcessAllFiles(ByVal userData As UserData)
        'Do the work
    End Sub
End Class

Public Class MainForm
    Private bw As New BackgroundWorker
    Private dp As New DataProcessor

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)

        If bw.CancellationPending = …
Run Code Online (Sandbox Code Playgroud)

vb.net multithreading class backgroundworker

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