标签: backgroundworker

.net网站BackgroundWorker.这是个好主意吗?

我计划在我的.net网站上使用BackgroundWorker,每晚12点进行一些数据库维护.让asynch进程监控时间并执行操作是一个好主意吗?我使用sql server express edition,所以我不能在数据库端使用任何调度.我也不想使用Windows任务调度程序

.net backgroundworker

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

代表与BackgroundWorker的差异?

任何人都可以解释委托和BackgroundWorker之间的区别吗?在哪种情况下,Backgroundworker比Delegate更有效?因为我们有异步委托,所以需要使用BackGroungWorker.

c# delegates backgroundworker

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

如何在VB.net中动态创建后台工作程序

我有一个VB.net项目,它使用后台工作程序来做一些事情.

现在我想扩展项目,以便能够做多个东西:)

用户可以在文本框中输入URL,当用户单击解析按钮时,程序会创建一个新的tabcontrol,输出一些数据.

我为此使用了一个硬编码的后台工作者.

但现在我想运行多个后台工作人员来完成这些工作,所以我不能依赖硬编码后台工作人员.

是否可以动态创建后台工作程序.

我只是不知道如何设置它,因为我认为我需要设置不同的方法和变量,如:

Private bw As BackgroundWorker = New BackgroundWorker
bw.WorkerReportsProgress = True
bw.WorkerSupportsCancellation = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
bw.RunWorkerAsync()
Run Code Online (Sandbox Code Playgroud)

Private Sub bw_DoWork(),Private Sub bw_RunWorkerCompleted()Private Sub bw_ProgressChanged()

我想我需要在某种数组中声明后台worker如变量(list/ dictionary)??? 除此之外,我不知道如何解决这个问题.

vb.net backgroundworker

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

VBNet错误:集合已被修改;枚举操作可能无法执行

这就是发生的事情:在我的应用程序的表单加载中,我创建了一个后台工作器来绑定控件上的集合(数据库中记录填充到数据集中的记录)。但是问题是当我更新数据库上的记录时,如果我再次运行此过程,则会引发错误。

    If xControl.InvokeRequired Then
        Dim MyDelegate As New InitializeDataBinding_Delegate(AddressOf InitializeDataBinding)
        Invoke(MyDelegate, New Object() {xControl, xQuery, xPrimaryKey}) ' ERROR HERE SAYING: Collection was modified; enumeration operation may not execute.
    Else
        Using ds As DataSet = New DataSet()
            Using dbAdapter As MySqlDataAdapter = New MySqlDataAdapter(xQuery, ConnectionClass.ConnectionString)
                dbAdapter.Fill(ds)
            End Using

            Dim dvm As DataViewManager = New DataViewManager(ds)
            Dim iDataList As DataView = dvm.CreateDataView(ds.Tables(0))
            For Each iBind As Binding In xControl.DataBindings
                xControl.DataBindings.Remove(iBind)
            Next
            xControl.DataBindings.Add("EditValue", iDataList, xPrimaryKey)
            xControl.Properties.DataSource = iDataList
            xControl.EditValue = Nothing …
Run Code Online (Sandbox Code Playgroud)

vb.net data-binding autocomplete backgroundworker

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

等待嵌套的BackgroundWorkers完成

我有一个UI按钮,可以生成BackgroundWorker.此BackgroundWorker生成几个执行某些操作的BackgroundWorkers.有没有办法等待所有内部BackgroundWorkers在主BackgroundWorker中完成?

.net c# vb.net wpf backgroundworker

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

如何在后台实现UDP监听器?(可用于log4net)

我想UDPListener在后台运行它:

// launch this in a background thread
private static void UDPListen()
{
    IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0)
    using( var udpClient = new UdpClient(10000)) 
    {
       while (true)
       {
           var buffer = udpClient.Receive(ref remoteEndPoint);
           var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer);
           // ...
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以把它放在一个Task.Run()并在while()循环中运行吗?

c# log4net asynchronous backgroundworker async-await

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

尽管使用BackgroundWorker,表单冻结,除非我们添加假睡眠

我已经成功地完成了我BackgroundWorker的工作WinForm.它工作正常,但实际上它没有.从下面可以看出,我的形式有一个listbox以及一个Progress Bar.我正在使用它们来显示在一个文件中写一个收件人列表的进度for loop.我知道这个过程运行得太快了.每次写入一行时,都会listbox显示" 添加x个y收件人 "消息并删除其自身的最后一个条目,以便不会有太多文本.还有每个插入物,progress bar必须迈出一步.

在此输入图像描述

当我在每次写入中添加1ms延迟时,程序工作正常Thread.Sleep(1).我的表单仍然可以在桌面上移动,表单看起来很正常.但是当我删除这个睡眠时(这是真实场景),表单会冻结,就好像我从未使用过并行BackgroundWorker开始一样.我怎样才能克服这个问题?

以下是我的BackgroundWorker DoWork()ProgressChanged()事件:

做工作:

private void backgroundWorkerConvertDatatableToFile_DoWork(object sender, 
                                                           DoWorkEventArgs e)
{
    try
    {
        StringBuilder sb = new StringBuilder();
        IEnumerable<string> columnNames = dt.Columns.Cast<DataColumn>().
                                            Select(column => column.ColumnName);
        sb.AppendLine(string.Join(GetDelimiter(campaignOutputFormat), columnNames));
        backgroundWorkerConvertDatatableToFile.ReportProgress(-1, 
                                   dt.Rows.Count.ToString() + " recipients found.");
        for (int i = 0; i < dt.Rows.Count; i++)
        {
           IEnumerable<string> fields = dt.Rows[i].ItemArray.Select(
                                                    field => field.ToString());
           sb.AppendLine(string.Join(GetDelimiter(campaignOutputFormat), fields));
           backgroundWorkerConvertDatatableToFile.ReportProgress(i, …
Run Code Online (Sandbox Code Playgroud)

c# multithreading listbox backgroundworker winforms

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

是否应该使用任意数量的线程来获得应用程序中的最佳性能?

我听说应用程序中有许多线程用于获得最佳性能.我听说当线程数量增加时,性能会提高到一点,之后会开始减少.而对于Android应用程序,限制就像3或4.

有人能解释一下吗?

目前我正在开发一个C#独立应用程序,在那里我使用了大约50个后台工作者.这对系统的性能有何影响?

c# multithreading backgroundworker

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

在MVVM中,如何防止BackgroundWorker冻结UI?

首先,我在SO和网络上看到了很多类似的问题.这些似乎都没有解决我的特定问题.

我有一个简单BackgroundWorker的工作是逐行读取文件并报告进度以指示它有多远.文件中总共有65,553行,因此BackgroundWorker尽可能快地完成对我来说很重要.

由于MVVM建立在关注点分离(SoC)和视图和视图模型的分离之上BackgroundWorker,因此View绑定的View-Model上的更新属性.我的设置与Kent Boorgaart在另一个问题上的答案非常相似.

BackgroundWorker需要大量CPU而不会休眠的高压力情况下,UI线程缺乏并且无法更新已通过通知的任何绑定属性INotifyPropertyChanged.但是,如果BackgroundWorker睡觉,那么工作将无法尽快完成.

如何在尊重MVVM的同时确保View接收进度更新,同时不限制作业?

在View-Model中,这样BackgroundWorker设置.该Start()函数由RelayCommand(MVVM-Light的一部分)调用.

public void Start(string memoryFile)
{
    this.memoryFile = memoryFile;
    BackgroundWorker worker = new BackgroundWorker();
    worker.DoWork += Worker_DoWork;
    worker.ProgressChanged += Worker_ProgressChanged;
    worker.WorkerReportsProgress = true;
    worker.RunWorkerAsync();
}
Run Code Online (Sandbox Code Playgroud)

以下是执行的实际工作的代码:

private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker bw = (BackgroundWorker)sender;
    IsAnalyzing = true;
    bw.ReportProgress(0, new ProgressState("Processing..."));

    int count = File.ReadLines(memoryFile).Count();
    StreamReader …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf mvvm backgroundworker

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

为什么/如何在没有DoWorkEventArgs的情况下使用BackgroundWorker?

以下是我正在研究的类的一个简化版本(WinForms项目的一部分):

class ReportBuilder {
    private List<Project> projects;
    private List<Invoice> invoices;
    private MyAPI apiObject;

    public ReportBuilder(MyAPI apiAccess, List<Project> selectedProjects){
        this.apiObject = apiAccess;
        this.projects = selectedProjects;
    }

    public void DownloadData(){
        BackgroundWorker workerThread = new BackgroundWorker();
        workerThread.DoWork += (sender, e) => this.retrieveInvoices(this.projects); // yes, the parameter is unnecessary in this case, since the variable is in scope for the method anyway, but I'm doing it for illustrative purposes
        workerThread.RunWorkerCompleted += receiveData;
        workerThread.RunWorkerAsync();
    }

    private void retrieveInvoices(List<Project> filterProjects){
        Notification status;
        if (filterProjects == null){this.invoices …
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker

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