利用後臺程式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程式,後臺的非同步操作會影響到我主程式介面的執行效果,比如部分介面元素丟失,而且感覺程式執行效果會很卡。
相關文章
- 前臺怎樣獲取後臺ajax資料簡單介紹
- form表單提交,後臺怎麼獲取select的值?後臺直接獲取即可,和input方式一樣。ORM
- 支付寶小程式(後臺)---獲取授權和使用者資訊
- 如何利用API介面獲取電商平臺資料?API
- 使用URLConnection物件獲取網路資源資訊物件
- jProcesses:使用Java獲取跨平臺程式的詳細資訊Java
- java後臺獲取cookieJavaCookie
- 怎樣在程式中獲取所有執行緒的堆疊資訊?執行緒
- 利用PHP獲取一個頁面上的連結資訊PHP
- springmvc 後臺獲取cookie的方法SpringMVCCookie
- HQChart使用教程69 -獲取指定股票的K線資料
- 怎樣從ipa格式檔案獲取資源圖片
- 使用 C# 獲取 Kubernetes 叢集資源資訊C#
- MFC中獲取程式自身的版本資訊
- 利用WinAPI(GetFileVersionInfo)獲取檔案版本資訊API
- 好用的資源獲取網站網站
- 登入驗證判斷,獲取後臺資料
- java後臺建立url連線,獲取介面資料Java
- 怎樣獲取jstree的節點資料_大資料獲客是怎樣獲取精準客源的JS大資料
- Python 系統資源資訊獲取工具,你用過沒?Python
- 利用VC++獲取異構型資料庫庫結構資訊 (轉)C++資料庫
- 怎樣獲取發生錯誤的會話資訊 -- 轉會話
- 怎樣獲取發生錯誤的會話資訊(轉)會話
- 怎樣獲取發生錯誤的會話資訊 zt會話
- NVIDIA Jetson平臺GPU/CPU/RAM等硬體資源利用率資料獲取及視覺化GPU視覺化
- JavaScript獲取元素計算後樣式的封裝JavaScript封裝
- 前端獲取不到後端新增的請求頭資訊前端後端
- Python量化交易系統實戰--獲取股票資料Python
- golang 介面按需獲取資源Golang
- XSS獲取管理後臺實戰
- 小程式獲取使用者位置資訊後再次手動授權
- 想獲取JS載入網頁的源網頁的原始碼,不想獲取JS載入後的資料JS網頁原始碼
- 第十七篇:獲取 / 修改程式資源限制
- 就這樣獲取檔案的MD5和大小
- Vue 部署後強制客戶端重新整理獲取最新的程式碼資源【純前端】Vue客戶端前端
- .NET CORE WEBAPI 後端獲取來源IPWebAPI後端
- [提問交流]ot後臺模板沒有使用iframe,這樣每次開啟頁面都得去資料庫獲取選單好嗎?資料庫
- 歷史股票資料的爬取