Powered By Blogger

關於我自己

我的相片
網站經營斷斷續續,現在以分享程式練習為主。 因為工作需要,不時會有練習程式的需要。 所以將自己練習的過程分享給大家。 如果有幫助到各位,那就太好了! 如果針對本人或網站內容有任何問題, 歡迎與我聯絡。

2016年7月30日 星期六

【VB.NET 語言】上報 練習 _ 使用 BackgroundWorker 再次上傳

第七集跟第六集是很有關聯的部分大家上下可以一起看一看!
整個始末請看(前情提要)
這裡就接著上集,當我們收集到了這些失敗資訊我們該怎麼辦!
就是再上傳阿,一直上傳到上傳成功為止!
那大家會覺得那就是要讓他不斷地跑上傳上傳上傳的事情吧!!
是的沒錯,就是要讓他跑,它能多快就要他跑多快,
要馬兒跑也要給馬兒吃草(有通電就好了)

這邊居裡貓使用的方法是 BackgroundWorker 的方法,
人如其名,就是再背景執行工作的意思!
不會讓他因為要不斷地跑,使你的其他工作中斷的好方法啊!

好,那我們就看看到底怎麼一個方法可以叫他跑吧!!!
有請程式碼~~~


-------------------------------------------------------------------------------------------------------------------------
  1. '這次一樣先給大家看看 BackgroundWorker 的長像!  
  2.   
  3.   
  4. Public Class Backwork  
  5.     'Public WithEvents background As New System.ComponentModel.BackgroundWorker  
  6.     Public Shared background As New System.ComponentModel.BackgroundWorker  
  7.   
  8.     Public Sub New()  
  9.         background.WorkerReportsProgress = True  
  10.         background.WorkerSupportsCancellation = True  
  11.   
  12.         background.RunWorkerAsync()  
  13.   
  14.     End Sub  
  15.   
  16.     Public Shared Sub main()  
  17.   
  18. '這邊就是啟動 Backgroundwork 的主要程式段落  
  19. '以及委派工作事件的地方  
  20.   
  21.         background.RunWorkerAsync()  
  22.         AddHandler background.DoWork, AddressOf back_DoWork  
  23.     End Sub  
  24.   
  25.     Private Shared Sub back_DoWork(ByVal sender As ObjectByVal e As System.ComponentModel.DoWorkEventArgs)  
  26.   
  27. '這裡才是 Backgroundwork 工作的內容  
  28. '這邊要注意到,居裡貓開始使用我們紀錄的 List 來判斷該怎麼樣工作  
  29. '然後當 List 裡面的檔案被上傳成功了就記得要清除該 List 項目喔!!!!  
  30.   
  31.         Dim retry As Boolean = True  
  32.         Dim retrytime As Integer = 0  
  33.         'Check upload NAS ro FTP  
  34.         If Copy_Delete_File.checkbox = False Then  
  35.             While retry  
  36.                 'Do upload to NAS back ground work  
  37.                 For i As Integer = 0 To ErrorList.CountNas - 1  
  38.                     Try  
  39.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.NASList(i), Copy_Delete_File.uptonas + "\" + ErrorList.NASList(i), True)  
  40.                         If ErrorList.CountNas = 0 Then  
  41.                             'If NasList count eaual 0, retry end  
  42.                             retry = False  
  43.                         Else  
  44.                             'retry not end and remove NasList now data then re do for  
  45.                             retry = True  
  46.                             ErrorList.RemoveNAS(i)  
  47.                             Exit For  
  48.                         End If  
  49.                     Catch ex As Exception  
  50.                         'Retry failure add retry times and error log  
  51.                         retry = True  
  52.                         retrytime += 1  
  53.                         'Console.WriteLine("Error list upload to NAS retry failured, back do work times : " & retrytime)  
  54.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to NAS retry failured, back do work times : " & retrytime)  
  55.                     End Try  
  56.                 Next  
  57.                 'If NasList count eaual 0, retry end  
  58.                 If ErrorList.CountNas = 0 Then  
  59.                     retry = False  
  60.                 End If  
  61.             End While  
  62.   
  63.         Else  
  64.   
  65.             While retry  
  66.                 For i As Integer = 0 To ErrorList.CountFtp - 1  
  67.                     Try  
  68.                         File.Copy(Copy_Delete_File.copypath + "\" + ErrorList.FTPList(i), Copy_Delete_File.uptoftp + "\" + ErrorList.FTPList(i), True)  
  69.                         System.Threading.Thread.Sleep(100)  
  70.                         FTPupload.uploadtoftp()  
  71.                         System.Threading.Thread.Sleep(100)  
  72.                         If ErrorList.CountFtp = 0 Then  
  73.                             'If NasList count eaual 0, retry end  
  74.                             retry = False  
  75.                         Else  
  76.                             'retry not end and remove NasList now data then re do for  
  77.                             retry = True  
  78.                             ErrorList.RemoveFTP(i)  
  79.                             Exit For  
  80.                         End If  
  81.                     Catch ex As Exception  
  82.                         'Retry failure add retry times and error log  
  83.                         retry = True  
  84.                         retrytime += 1  
  85.                         'Console.WriteLine("Error list upload to FTP retry failured, back do work times : " & retrytime)  
  86.                         ErrorList.AddLog(Now.ToString("yyyyMMddHHmmss _ ") + "Error list upload to FTP retry failured, back do work times : " & retrytime)  
  87.                     End Try  
  88.                 Next  
  89.                 'If NasList count eaual 0, retry end  
  90.                 If ErrorList.CountFtp = 0 Then  
  91.                     retry = False  
  92.                 End If  
  93.             End While  
  94.   
  95.         End If  
  96.     End Sub  
  97.   
  98. End Class  
  99.   
  100. '----分割線,居裡貓是在 WriteXML 這個按鈕被工作的時候才要開始做不斷的上傳工作喔!  
  101.   
  102.     Private Sub Btn_WriteXML_Click(sender As Object, e As EventArgs) Handles Btn_WriteXML.Click  
  103.         'Check watch event was raising  
  104.         If Watcher.watcher.EnableRaisingEvents = False Then  
  105.             Watcher.watcher.EnableRaisingEvents = True  
  106.         End If  
  107.   
  108.         Copy_Delete_File.GetPath(TxB_Local.Text, TxB_Remote.Text, TxB_NAS.Text, TxB_FTP.Text, ChB_UploadFTP.Checked)  
  109.   
  110.         FTPupload.Get_FTPinfo(TxB_FTPAddress.Text, TxB_FTPAccount.Text, Txb_FTPPassword.Text)  
  111.   
  112.         Dim wrXML As New XML  
  113.         wrXML.LocalPath = TxB_Local.Text  
  114.         wrXML.RemotePath = TxB_Remote.Text  
  115.         wrXML.NASPath = TxB_NAS.Text  
  116.         wrXML.FTPPath = TxB_FTP.Text  
  117.         wrXML.Data = "This is a Programming Practices " & Now.ToString  
  118.         wrXML.DateTime = Now.ToString  
  119.         If ChB_UploadFTP.Checked Then  
  120.             wrXML.CheckFTP = "Ture"  
  121.         Else  
  122.             wrXML.CheckFTP = "Flase"  
  123.         End If  
  124.   
  125.         Dim objectStreamWriter As New StreamWriter(TxB_Local.Text + ("\Program Practices " & Now.ToString("_yyyyMMddHHmmss") & ".xml"))  
  126.         Dim xmlserialize As New XmlSerializer(wrXML.GetType)  
  127.         xmlserialize.Serialize(objectStreamWriter, wrXML)  
  128.         objectStreamWriter.Dispose()  
  129.   
  130.         'Check backwork status  
  131.         'If Not back.IsBusy = True Then  
  132.         '    back.RunWorkerAsync()  
  133.         'End If  
  134.   
  135. '在這裡~~~~  
  136.   
  137.         Backwork.main()  
  138.   
  139.     End Sub  

--------------------------------------------------------------------------------------------------------------------------

好的,今天的分享就是利用 BackgroundWorker 的方法來解決我們再次重新上傳的工作,
有了這一層保險我們就可以無慮的繼續別的工作,
他會默默的幫我們不斷嘗試重新上傳~

下集應該就是差不多要完結了~
請各位期待一下了~拜託!感謝~~哈哈哈哈
感謝各位收看!!!!感謝各位先進的教學文~


底下就是這個連續劇程式分享的分段分享內容

1. 上報 練習 _ 選擇資料夾
2. 上報 練習 _ 寫一個 .XML 資料
3. 上報 練習 _ 監控資料夾
4. 上報 練習 _ 複製檔案
5. 上報 練習 _ FTP Server 檔案上傳
6. 上報 練習 _ 上傳錯誤紀錄
7. 上報 練習 _ 使用 BackgroundWorker 再次上傳
8. 上報 練習 _ Log 紀錄
9. 上報 練習 _ 完整程式碼分享

沒有留言:

張貼留言