Выделить процесс занимающий много времени в отдельный поток - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

При запуске приложения нужно обработать значительное количество данных. Например, исследовать содержимое папки с несколькими тысячами файлов. Эта операция занимает на среднем компьютере более 10 секунд. Если выполнение этой операции производить в Form_Load это затормозит загрузку приложения. Причём результаты выполнения этой длительной операции понадобятся не сразу после загрузки формы, а чуть позднее. А если в Form_Load вставить запуск второго потока в котором и производить эту операцию, не мешая при этом процессу запуска приложения? Если это возможно, то как это реализовать? Вот приблизительный пример для демонстрации описанных выше "тормозов":
Вот нашёл в одной из тем (ответ Sklifosofsky):
Но почему-то цикл For совершается довольно медленно (если не использовать второй поток, цикл завершается мгновенно). И не могу догадаться как сделать, чтобы в метке появился конечный результат вычисления цикла, а не последовательный перебор значений.

Решение задачи: «Выделить процесс занимающий много времени в отдельный поток»

textual
Листинг программы
Public Class Form1
    Private Delegate Sub _dlg()
    Private CallBack As New _dlg(AddressOf ShowResult)
 
 
    Dim count As Long
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim th As New MethodInvoker(AddressOf LongProc)
        th.BeginInvoke(Nothing, Nothing)
    End Sub
 
 
 
    Sub LongProc()
        For i As Long = 0 To 4000000000
            count += i
        Next
 
        Try
            Me.Invoke(CallBack)
        Catch ex As Exception
            Exit Sub
        End Try
    End Sub
 
    Sub ShowResult()
        Label1.Text = count.ToString
    End Sub
 
End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы