`
cloudtech
  • 浏览: 4610719 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

利用后台进程System.ComponentModel.BackgroundWorker获取股票这样的资源信息

 
阅读更多

今天拜读了别人的代码,发现自己又一次孤陋寡闻.

System.ComponentModel提供了很多丰富的对象让编程更简单,很容易地达到你要实现的目的,避免自己写更多的逻辑来实现你要的需求。

假设我们的产品是一个网站,它需要获取internet上其它网站的信息,比如股票,天气预报。要获取这样的附属信息一般不能用主线程直接获取,因为要频繁地获取这样的信息势必会影响网

站的性能,那就用.net提供的后台进程以异步的方式来执行吧!多线程我们首先想到的是new System.Threading.Thread对象来实现,但我们这里只是期望一个不怎么“重要”的线程,或

者说不频繁使用,或者是仅仅执行一个操作(可以理解为一个事件),那么可以采用System.ComponentModel.BackgroundWorker来做更贴切。

看看他的用法:

1. 首先new 一个实例: private System.ComponentModel.BackgroundWorker backgroundGetData = new System.ComponentModel.BackgroundWorker();

2.定义一个后台进程执行任务的事件,名称为 BackgroundGetData_DoWork,类型是DoWorkEventHandler . 代码如下:

private void BackgroundGetData_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)

{

XDocument doc = XDocument.Load(url);

//很容易从这个doc里面获取天气,股票信息了,因为XDocument能够把一个url例如http://www.nasdaq.com/aspxcontent/NasdaqRSS.aspx?data=quotes&symbol=CAC.

//怎么处理这个xml来获取这些信息就不在这里写了。只需记住给System.Xml.Linq.XDocument传入一个正确的url即可。

}

3.注册这个事件: this.backgroundGetData.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BackgroundGetData_DoWork);

4.倒数第二步是异步调用这个后台进程.

很简单,即使是不同进程间调用,只要知道这个后台进程是定义在主线程里的,所以只需知道这个后台对象的实例,你就可以执行它里面的方法:

/// <summary>
/// Retrieve the data on a separate thread. Async call.
/// </summary>
public void GetOnlineData()
{
System.Diagnostics.Trace.WriteLine("GetOnlineData(): Retrieving new data for the scroll queue.");
if (!this.backgroundGetData.IsBusy)
{
this.backgroundGetData.RunWorkerAsync();
}
}

5.最后就是不要忘记自己写代码销毁它。怎么销毁呢?定义了后台进程的这个类实现这个IDisposable这个接口,在Dispose()方法里写代码就好了。

public void Dispose()
{
if (this.backgroundGetData != null)
{
this.backgroundGetData.Dispose();
this.backgroundGetData = null;
}
}

最后,补充一句,虽然System.ComponentModel.BackgroundWorker提供了异步执行的机制,但是后台进程如果频繁执行异步,比如每10秒执行一次,由于我的主程序是个使用WPF做效果的winform程序,后台的异步操作会影响到我主程序界面的执行效果,比如部分界面元素丢失,而且感觉程序执行效果会很卡。

分享到:
评论

相关推荐

    System.dll

    System.ComponentModel.BackgroundWorker 线程引用

    c# 利用BackgroundWorker后台检测Internet连接是否可用

    利用BackgroundWorker后台检测Internet连接是否可用利用BackgroundWorker后台检测Internet连接是否可用

    c#使用命名管道实现打印调试

    using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.IO.Pipes; using System.IO; ...

    C#中使用BackgroundWorker 实现后台操作窗体

    C#,使用,BackgroundWorker ,实现,后台操作窗体 C#,使用,BackgroundWorker ,实现,后台操作窗体 C#,使用,BackgroundWorker ,实现,后台操作窗体 C#,使用,BackgroundWorker ,实现,后台操作窗体 C#,使用...

    BackgroundWorker组件和Thread更新UI界面对比

    BackgroundWorker组件和Thread更新UI界面对比

    c#异步操作后台运行(backgroundworker类)示例

    using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading;using System.Windows.Forms; namespace TestBackgroundWork{ public partial ...

    asp.net BackgroundWorker之在后台下载文件

    示例: 下面的代码示例演示如何使用 BackgroundWorker 组件从 URL 加载 XML 文件。用户单击“下载”按钮时,Click 事件处理程序将调用 ... using System.ComponentModel; using System.Drawing; using System.Thre

    backgroundworker

    在android和ios中实现类似c#的BackgroundWorker的代码

    WinForm中BackgroundWorker控件用法简单实例

    using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WinFormApp { public partial class Form2 : Form {

    BackgroundWorker Demo

    BackgroundWorker Demo

    BackgroundWorker类基本知识.zip

    vb.net,vs2010,对msdn上的BackgroundWorker类的一个实例作深入全面透彻的解释与分析,如果你还不理解,那就请下载我的别一个自己写的关于BackgroundWorker的一个实例,看了这两个实例,包您对BackgroundWorker类的...

    backgroundworker全面深入透彻解析.zip

    backgroundworker全面深入透彻解析,vb.net,vs2010,对msdn上的BackgroundWorker类,自己写了一个实例,深入全面透彻的解释与分析BackgroundWorker的用法,它是通过我几天几夜奋战的结果,如果你还不了解,那就只能靠...

    C#在后台运行操作BackgroundWorker的用法

    在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示...

    BackgroundWorker后台任务实例源码

    虽然实现异步后台任务的方法很多,而且随着类库的更新,方法会更多更简单更灵活...不过,BackgroundWorker组件不应该被忽略,当初它的出现,正是专用于处理后台长时间运行的任务的,组件会自行处理线程调度,比较实用。

    TimerAndWorker

    简单介绍了System.Windows.Forms.Timer 和 BackgroundWorker实现实时更新画面的方法以及他们的区别。 作者Email: qiuye1pian@sina.com 运行环境: Vs2008 sp1 .net Framework3.5

    VB.net BackgroundWorker使用例子很经典

    VB.net BackgroundWorker使用例子

    BackgroundWorker 简单应用示例

    BackgroundWorker 简单应用示例,里面详细介绍了BackgroundWorker并附有示例

Global site tag (gtag.js) - Google Analytics