标签: backgroundworker

.NET Backgroundworker对象的线程优先级

我正在尝试在我正在开发的应用程序中使用.NET Backgroundworker对象.

互联网上的所有资料都说这个对象在"背景"中运行,但我无法确认这个后台线程确实以"低优先级"模式运行.出现这个问题是因为在Windows中(我假设)后台任务可以在"正常"或"低于正常"或"低"优先级模式下运行.

在我的应用程序中,我尝试通过调用...在DoWork函数内设置优先级...

Thread.CurrentThread.Priority=ThreadPriority.Lowest
Run Code Online (Sandbox Code Playgroud)

...

但这似乎没有效果.后台工作者是否忽略此调用?

我想解释一下:

我的应用程序是一个互联网客户端,从一个房间收集有关温度,湿度等的实时数据,并使用上传到网页(不是网络服务)

system.net.webclient.UploadValuesAsync(...) 电话

我编写了应用程序,以便客户端GUI收集来自分庭的数据,给它们加上时间戳,然后将它们排队等待上传,就像这样

...

Synclock objlock
    debug.print("Queueing reading...")
    dataQ.Enque(reading)
End Synclock
...
Run Code Online (Sandbox Code Playgroud)

backgroundworker的Dowork函数出列然后上传,就像这样......

..............

Do
        if dataQ.count() <> 0 then
            Synclock objlock
              reading = dataQ.DeQue()
            End Synclock
            Dim client As New System.Net.WebClient
            ...put the reading in NameValueCollection and upload to server page
            req = new NameValueCollection
            ...
            ...
            client.UploadValuesAsync(uri, "POST", req)
        endif
        thread.sleep(1) 'without this line the CPU usage goes upto 100% and seems to slow other tasks!
    Loop …
Run Code Online (Sandbox Code Playgroud)

.net multithreading backgroundworker

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

在BackgroundWorker忙的时候禁用表单?

当某个后台工作人员忙碌(工作)时,我不希望用户与我的应用程序进行交互.我创建了这个bgw,以便应用程序在工作时看起来不会冻结.但现在用户可以在应用程序中移动.如何禁用我的表单/应用程序?

谢谢!

c# backgroundworker

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

C#后台工作者

我有一个在后台工作中运行的任务.单击开始按钮用户启动该过程并有一个取消按钮取消处理.

当用户点击取消时,我想显示一个消息框"进程尚未完成,是否要继续".

在这里,我希望只有在用户输入后才能进行处理.然后,然后想要停止背景线程.谁可以帮我这个事.反正有没有停止背景工作者一段时间.任何一种帮助将不胜感激.

c# backgroundworker

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

在给定的延迟后,简单的方法来执行方法?

是否有一种简单的方法可以在iOS开箱后的特定延迟后执行方法?

在iPhone上我会这样做:

[self performSelector:@selector(connectSensor) withObject:nil afterDelay:2.5];

然后,它将connectSensor在2.5秒后执行主线程(UI线程)上的方法.并且因为它是在主线程上自动调度的,所以您不必担心跨线程问题.(还有一个performSelectorOnBackground版本)

那么我如何在WP7中正确地做到这一点?

目前我正在用计时器完成这项工作,但我不确定这是否是一个很好的解决方案.

    private Timer timer;
    private void DoSomethingAfterDaly()
    {
        // ... do something here

        timer = new Timer( (o) => Deployment.Current.Dispatcher.BeginInvoke(() => NavigationService.GoBack()), null, 2500, Timeout.Infinite);            
    } 
Run Code Online (Sandbox Code Playgroud)

如何将其封装到扩展方法中,以便我可以调用this.Perform(MyMethod, null, 2500);

timer backgroundworker thread-safety windows-phone-7

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

WPF MVVM更新后台工作者的视图模型

这个senerio有效吗?

我有一个View来维护一个Item.

我有View Model,它将Item对象(实现INotifyPropertyChanged)公开为View绑定的Property.

将Item对象传递给修改它的Backgroundworker是否有效,然后在BackgroundWorking完成时引发PropertyChanged事件?

或者BackgroundWorker不应该修改Item对象.我将使用BackgroundWorker传回的结果更新现有的Item对象.这将在RunWorkerCompleted事件中完成.但这会锁定UI线程并击败拥有背景工作者的对象吗?

困惑?

我会试着解释一下.

用户可以选择创建项目.我创建了视图和视图模型.在View模型中,创建一个空Item对象.他被提供了一个视图来维护项目.在选择"项类型"属性时,这会启动一个复杂的过程来创建用户输入的权限列表.我可以在创建列表时阻止UI线程,但这会给用户带来糟糕的体验.我想将处理传递给后台线程,同时保持UI活着.目前,我设置了一个标志来指示View正在加载的部分,将Item对象传递给BackgroundWorker,后者更新了可观察的Properties集合.当BackgroundWorking完成后,我调用PropertyChanged事件,该事件更新绑定到列表的View部分,并关闭该标志以指示该部分正在加载.这似乎没有任何问题.但我有一种直觉,我不应该在后台线程中更新视图模型中的绑定项.

谢谢蒂姆

wpf mvvm backgroundworker

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

BackgroundWorker不会触发RunWorkerCompleted事件

我正在创建不在我的Windows窗体中的后台工作程序,而是在实现所有处理的类文件(BusinessLogic)中.从主窗体我首先调用初始化BGW的BL方法.然后我调用BL的方法来启动BGW.

这是我的实现更多背景:). 如何在类文件中使用BackGroundWorker?

DoWork事件运行正常,但它不会调用RunWorkerCompleted.

一些谷歌搜索,我发现了这个链接.我觉得我的问题与这些家伙一样. http://www.eggheadcafe.com/software/aspnet/29191764/backgroundworker-does-not-fire-the-runworkercompleted-event.aspx

我对此问题的任何意见表示感谢.提前致谢.

主要代码:

    private void frmMain_Load(object sender, EventArgs e)
    {
      Hide();
      BusinessLogic.BGWInitialize();
      BusinessLogic.StartBackgroundWorker();                
      while (!BusinessLogic.firstCycleDone)
      {
        Thread.Sleep(100);
      }
      Show();            
    }        
Run Code Online (Sandbox Code Playgroud)

BusinessLogic中的代码:

    public static void BGWInitialize()
    {
        bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
        bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChanged);
        bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted);
        bgWorker.WorkerReportsProgress = true;
    }

    public static void StartBackgroundWorker()
    { 
        bgWorker.RunWorkerAsync();
    }


    private static void bgWorker_RunWorkerCompleted(
        object sender, RunWorkerCompletedEventArgs e)
    {            
        firstCycleDone = true;             

    }
Run Code Online (Sandbox Code Playgroud)

.net c# backgroundworker

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

Heroku登录Resque工作者

我正在使用Heroku + RedisToGo + Resque.我有一个正在运行非结束任务的工人.我想要记录它的活动.heroku logs --tail没有显示有关工人活动的任何信息.我怎样才能做到这一点?谢谢!

logging heroku backgroundworker resque ruby-on-rails-3

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

在BackgroundWorker中调用ShowDialog

我有一个WinForms应用程序,我的后台工作人员正在执行同步任务,添加新文件,删除旧文件等.

在我的后台工作者代码中,我想向用户显示一个自定义表单,告诉他将删除什么以及如果他继续将添加什么,使用YES/NO按钮获取他的反馈.

我想知道在后台工作者的doWork方法中做这样的事情是否可行?如果没有,我该怎么办?

请指教..

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
   MyForm f = new MyForm();
   f.FilesToAddDelete(..);
   DialogResult result = f.ShowDialog();
   if(No...)
   return;
   else
   //keep working...
}
Run Code Online (Sandbox Code Playgroud)

c# backgroundworker winforms

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

C#/ VB.Net任务vs线程与BackgroundWorker

我有"谷歌搜索"但仍然与任务,线程和后台工作者混淆.....

  1. "任务是在当前线程上运行的高级API"是否正确?

  2. 如果1是正确的,为什么我需要使用invoke来更改同一线程中任务内的UI?

  3. Backgroundworker在应用程序中只获得最低优先级?那么backgroundworker的性能低于任务和线程?对 ?

  4. 最后,在我的应用程序中,我需要使用"HttpWebRequest"从服务器获取一个字符串,之后解析字符串并更新UI.如果我使用"HttpWebRequest.BeginGetResponse"来等待异步结果并触发一个完整的事件来更新UI,我需要使用invoke方法来调用UI线程控件,但是我可以使用后台工作器代替吗?我可以简单地在"RunWorkerCompleted"事件中更改UI,有什么不利之处吗?

对不起我的游泳池英语并感谢您的帮助......!

c# vb.net multithreading task backgroundworker

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

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

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

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

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

c# backgroundworker winforms

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