Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Многопоточность Добавлено: 17.03.08 19:25  

Автор вопроса:  RedRum
уже весь форум перерыл но так и не разобрался..
задача: есть некая программа которая должна в фоновом режиме делать некое действие долгое ( считывает из файла текст), проблема в том что в 1 поток, пока этот процесс не завершится программа виснет.. нужно сделать так чтоб текст грузился независимо от основного окна (фоново) но как этот Thread юзать я так и не понял

вот к примеру
Dim trd = New Threading.Thread(AddressOf a)
на что мне говортися что "а" у меня not declared.. КАК я должен был написать правильно?
все что мне нужно это 2й поток для загрузки текста в фоне

если можно приведите полный пример использывания самих потоков. что то тип. код проги эт тот код который я в своей программе напишу

Public Class Form1
тут работа с потоками
--- код проги--
end class

4 день уже ищу как с ними работать нифига не нашел понятного для себя.. памагите плз!

Ответить

  Ответы Всего ответов: 4  

Номер ответа: 1
Автор ответа:
 Wolf4D



Вопросов: 20
Ответов: 131
 Web-сайт: www.madnesstudio.ru
 Профиль | | #1
Добавлено: 17.03.08 23:22
Эммм... DoEvents может помoчь

Ответить

Номер ответа: 2
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #2 Добавлено: 18.03.08 01:33
Вот пример как запустить процедуру из самодельного класса в отдельном потоке.
Public Class WillUseThreads
        Inherits System.Windows.Forms.Form
        Public Sub SubtractFromCounter()
            Dim i As Decimal
            For i = 0 To 4000000
                '.....
            Next
            MsgBox("Поток завершен.";)
         End Sub
    End Class
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim mt As New WillUseThreads()
        Dim bts As New ThreadStart(AddressOf mt.SubtractFromCounter)
        Dim bt As New Thread(bts)
        bt.Start()
    End Sub

Вроде бы так.
В твоем случае проще юзать DoEvents (Wolf4D верно говорит.).

Ответить

Номер ответа: 3
Автор ответа:
 RedRum



Вопросов: 3
Ответов: 5
 Профиль | | #3 Добавлено: 18.03.08 18:34
о, спс, попробую применить. нашел еще контрол BackgroundWorker, работает на вид точно так же как и эти трейды, ток с ним обращаться проще, хотя такие же ограницения, допустип циклы и вычисления внутри выполняются, а например менять значение прогресс бара напрямую не может... ток через внешнюю общюю переменную ( я для этих целей таймер обновления знчения прогресбара заюзал, бред конечно, но работает + в моем случае таймер еще пригодится =) )

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #4 Добавлено: 20.03.08 16:50
С потоками работать очень легко, ничего сложного здесь не вижу

DoEvents в дотнете применять не советую.

BackgroundWorker неплохой вариант, но по сути та же надстройка над потоком.

Чтоб изменить значение родительской формы, общая переменная не нужно - получить доступ к форме из другого пока можно через ControlInvoke.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам