none
請問使用VB2005的my...CopyFile時,當單一檔很大(1~2gb),如何配合ProgressBar來顯示進度呢? RRS feed

  • 問題

  • 版主及各位先進:

    在下使用vb2005開發工具時遇到一個狀況,需要請大家指點方向.麻煩大家不吝指教.

    在下使用My.Computer.FileSystem.CopyFile()在進行檔案複製時,因為檔案極大(1~2GB)故會使程式就像停止回應,但透過了多執行緒方式,即可使程式不會像是停止回應,但卻一直無法配合ProgressBar來顯示進度,因為從市面上的書籍及MSDN上的文件,ProgressBar部份都只有談到以變更VALUE來使ProgressBar看來像是有進度的變化,這個在一次複製多個檔案時很簡單,只要把COPY完時,VALUE變更即可,但若只有一個很大的檔案,就找不到文章來參考了,可否像是檔案總管COPY時出現剩餘時間的功能呢?

    麻煩大家了,在下先對任何提供在下方向及意見的先進說聲謝謝.

    SBM

    2006年8月14日 下午 05:08

解答

  • HI,

    您可以使用.NET 2.0提供的BackgroundWorker控制項執行COPYFILE的動作, 而且可以顯示進度, 做法如下:

    1. 為Form加入一個BackgroundWorker控制項

    2.在使用者按下按鍵時呼叫BackgroundWorker控制項的RunWorkerAsync方法進行非同步作業:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            BackgroundWorker1.RunWorkerAsync()
    End Sub

    3. 處理BackgroundWorker控制項的DoWork事件, 在DoWork事件處理程序中執行COPYFILE的動作, 利用FileIO.UIOption.AllDialogs參數顯示複製檔案的進度

     Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            My.Computer.FileSystem.CopyFile("E:/Image/xp.gho", "c:/xp.gho", FileIO.UIOption.AllDialogs)
    End Sub

     

    this

    2006年8月15日 上午 02:05

所有回覆

  • HI,

    您可以使用.NET 2.0提供的BackgroundWorker控制項執行COPYFILE的動作, 而且可以顯示進度, 做法如下:

    1. 為Form加入一個BackgroundWorker控制項

    2.在使用者按下按鍵時呼叫BackgroundWorker控制項的RunWorkerAsync方法進行非同步作業:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            BackgroundWorker1.RunWorkerAsync()
    End Sub

    3. 處理BackgroundWorker控制項的DoWork事件, 在DoWork事件處理程序中執行COPYFILE的動作, 利用FileIO.UIOption.AllDialogs參數顯示複製檔案的進度

     Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            My.Computer.FileSystem.CopyFile("E:/Image/xp.gho", "c:/xp.gho", FileIO.UIOption.AllDialogs)
    End Sub

     

    this

    2006年8月15日 上午 02:05
  • 在 VB2005 可以使用內建的界面顯示:

    My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName ,showUI)
    My.Computer.FileSystem.CopyFile(sourceFileName ,destinationFileName ,showUI ,onUserCancel)

    ShowUI 的選擇:

      成員名稱 說明
    AllDialogs 顯示進度對話方塊和任何錯誤對話方塊。 
    OnlyErrorDialogs 只顯示錯誤對話方塊,隱藏進度對話方塊。預設值。 


    若是要自訂進度列,請直接存取檔案,一般習慣用位元陣列來處理,考慮到 1 節區 64 kb 的情況下,基於效能考量,緩衝區通常用 32 kb 或 64 kb 。
    2006年8月15日 上午 02:05
    版主