用WPF+MongoDB開發房產資訊收集器(2)——後台線程線程

來源:互聯網
上載者:User

原文地址:

http://www.cnblogs.com/adaiye/archive/2011/10/25/WPF-MongoDB-Fan-Thread.html

 

 

想必童鞋們都知道,在進行耗時操作(如這裡的爬蟲抓取分析網站資料)時,如果沒有用線程來執行,就會造成介面假死。

針對這個問題,.NET會為我們提供了很多處理多線程的工具,BackgroundWorker就是其中一個,他將多線程的處理全部都封裝好了,對於應用那是一用一個方便。

用法相當簡單,定義一個BackgroundWorker

view sourceprint?
private BackgroundWorker bw = new BackgroundWorker();

然後定義其DoWork和RunWorkerCompleted事件,如果想報告進度的話,還可以處理ProcessChanged事件。

bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);

我們把耗時的操作(爬蟲抓取分析網站資料)放在bw_DoWork裡面:

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = getData();
}

然後在Completed事件裡面顯示資料,在顯示資料的時候要注意,由於是多線程,不能跨線程訪問控制項,所以需要用dispatcher調用委託:

private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.Dispatcher.BeginInvoke(new Action(() =>
{
List<HouseInfo> listHI = e.Result as List<HouseInfo>;
rgv.ItemsSource = null;
rgv.ItemsSource = listH;
}));
}

OK,以上就是用線程來擷取資料了。

但是很多情況下我們希望能夠讓爬蟲隔一段時間去爬一下,而不是只爬一次,或者有使用者主動觸發的時候才爬。所以,我們需要一個鬧鐘(Timer)來通知爬蟲該工作了。

所以,我們再定義一個Timer:

view sourceprint?
private DispatcherTimer timer = new DispatcherTimer();

定一個Timer的時間間隔和Tick事件:

view sourceprint?
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = new TimeSpan(0, 5, 0);   // 五分鐘

然後在Tick事件裡通知爬蟲工作:

private void timer_Tick(object sender, EventArgs e)
{
if (!bw.IsBusy) // 如果在IsBusy==true的情況下還RunWorker,BackgroundWorker會報異常
{
bw.RunWorkerAsync();
}
}

最後附上可執行程式,供大家拍磚用~房產資訊採集器

 

接下去我會把MongoDB資料庫增加上來,把下載下來的資料添加到資料庫中~~~~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.