Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Отмена совершаемого события


Автор: DENSHER 29.11.2010, 18:05
Каким образом можно отменить событие (DownloadTest) закачки файла.

Код

Private Sub BtStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtStart.Click
        Label2.Text = "Идет закачка файла."       
        Call DownloadTest()
    End Sub

Private Sub BtCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtCancel.Click
        ' Отменить закачку файла
    End Sub

Sub DownloadTest()
        Try
            Dim myClient As New WebClient()

            AddHandler myClient.DownloadProgressChanged, AddressOf DownloadProgressCallback
            AddHandler myClient.DownloadFileCompleted, AddressOf DownloadFileUnzip

            Dim url As New Uri("http://127.0.0.1/test.zip")
            Dim file As String = My.Application.Info.DirectoryPath & "\update\test.zip"

            myClient.DownloadFileAsync(url, file)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Private Sub DownloadProgressCallback(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
        ProgressBar1.Value = e.ProgressPercentage
        Label1.Text = (e.ProgressPercentage.ToString & "%")
    End Sub

Private Sub DownloadFileUnzip()
            ' Распаковка файла
        Try
            Label2.Text = "Идет распаковка файла."
            File.Exists("update\test.zip")
            zipfile.ExtractZip("update\test.zip", ".", "")
            Label2.Text = "Файл успешно распакован."
            File.Delete("update\test.zip")
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Автор: RobinHoodPHD 29.11.2010, 20:40
Запустите загрузку - DownloadTest, в отдельном потоке, для этого служит класс System.Threading.Thread А по нажатию кнопки отмены вызывайте метод Abort класса Вашего потока загрузки. 

Автор: DENSHER 29.11.2010, 21:50
Попытался сделать отдельный поток и остановить, но файл все равно докачиваеться до конца (

Вот что делал , (может что-то неправильно):
Код

Public DownloadThread As System.Threading.Thread

Private Sub BtStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtStart.Click
        Label2.Text = "Идет закачка файла."     
        DownloadThread = New System.Threading.Thread(AddressOf DownloadTest)
        DownloadThread.Start() ' Запуск нового потока.  
    End Sub

Private Sub BtCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtCancel.Click
        ' Отменить закачку файла
        DownloadThread.Abort()
    End Sub


Нашел способ как сеё чудо остановить.
Перед оператор объявить переменную -  Dim myClient As New WebClient() , BtCancel добавить myClient.CancelAsync() и закачивание файла останавливается.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)