BackgroundWorker

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

BackgroundWorker

Сообщение oskolok_vatbI » 20.02.2009 (Пт) 15:42

Пытаюсь разобраться с потоками, слепил тестовый проект:
Код: Выделить всё
    Const StartFile As String = "C:\1.avi"
    Const DestFile As String = "C:\2.avi"

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
        lbStatus.Text = "Идет копирование"
        BckgWorker.RunWorkerAsync()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        lbStatus.Text = "Для начала копирования нажмите Start"
    End Sub

    Private Sub BckgWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BckgWorker.DoWork
        My.Computer.FileSystem.CopyFile(StartFile, DestFile, True)
    End Sub

    Private Sub BckgWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BckgWorker.ProgressChanged
        ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub BckgWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BckgWorker.RunWorkerCompleted
        lbStatus.Text = "Копирование завершено"
    End Sub


Что тут не так? Почему не заполняется прогрессбар ?

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: BackgroundWorker

Сообщение ANDLL » 20.02.2009 (Пт) 15:46

А с какого же чуда он должен заполняться?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: BackgroundWorker

Сообщение oskolok_vatbI » 20.02.2009 (Пт) 15:51

Не знаю... Верил в чудеса. Намекни хоть что тут не так ?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Re: BackgroundWorker

Сообщение RayShade » 20.02.2009 (Пт) 16:13

BckgWorker.ReportProgress надо вызывать в теле DoWork. И в нем передавать уже, на сколько процентов ты хочешь двинуть бар :)
I don't understand. Sorry.

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Re: BackgroundWorker

Сообщение oskolok_vatbI » 21.02.2009 (Сб) 12:48

Ну никак я не пойму как этим пользоваться, так тоже не работает:
Код: Выделить всё
    Private Declare Auto Function CopyFileEx Lib "kernel32.dll" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal lpProgressRoutine As CopyProgressRoutine, ByVal lpData As Int32, ByVal lpBool As Int32, ByVal dwCopyFlags As Int32) As Int32
    Private Delegate Function CopyProgressRoutine(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32

    Const StartFile As String = "C:\1.avi"
    Const DestFile As String = "C:\2.avi"
    Dim PercentComplit As Long
    Dim StartFileSize, DestFileSize As Long

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdStart.Click
        lbStatus.Text = "Идет копирование"
        BckgWorker.RunWorkerAsync()
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        txtStart.Text = StartFile
        txtDest.Text = DestFile
        lbStatus.Text = "Для начала копирования нажмите Start"
        StartFileSize = My.Computer.FileSystem.GetFileInfo(StartFile).Length
        lbStartFileSize.Text = StartFileSize
        If My.Computer.FileSystem.FileExists(DestFile) Then
            DestFileSize = My.Computer.FileSystem.GetFileInfo(DestFile).Length
        Else
            DestFileSize = 0
        End If
    End Sub

    Private Sub BckgWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BckgWorker.DoWork
        Dim cpr As New CopyProgressRoutine(AddressOf CopyProgress)
        CopyFileEx("C:\1.avi", "C:\2.avi", cpr, 0, 0, 0)
        BckgWorker.ReportProgress(PercentComplit)
    End Sub

    Private Sub BckgWorker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BckgWorker.ProgressChanged
        ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub BckgWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BckgWorker.RunWorkerCompleted
        lbStatus.Text = "Копирование завершено"
    End Sub

    Private Function CopyProgress(ByVal totalFileSize As Int64, ByVal totalBytesTransferred As Int64, ByVal streamSize As Int64, ByVal streamBytesTransferred As Int64, ByVal dwStreamNumber As Int32, ByVal dwCallbackReason As Int32, ByVal hSourceFile As Int32, ByVal hDestinationFile As Int32, ByVal lpData As Int32) As Int32
        PercentComplit = Convert.ToInt32(totalBytesTransferred / totalFileSize * 100)
    End Function

Мне кажется BckgWorker.ReportProgress срабатывает, но только один раз и когда файл уже скопирован. Как его постоянно-то вызывать ?

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: BackgroundWorker

Сообщение Nord777 » 21.02.2009 (Сб) 12:57

Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: BackgroundWorker

Сообщение ANDLL » 21.02.2009 (Сб) 13:32

Вызывай ReportProgress в CopyProgress
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 98

    TopList