Использование объекта из другого потока - Visual Basic .NET
Формулировка задачи:
Приветствую, граждане.
Не являюсь программистом и не собираюсь им становиться. Лишь ИЗРЕДКА что-то пишу для собственных бытовых нужд. Поэтому прошу не отправлять читать статьи и всякие талмуды. Признаюсь, мне, в идеале, нужен тупо ответ), а не наталкивание на мысли)
В программе моей классическая беда, наталкивающая на необходимость использования нескольких потоков. Почитал об этом, но в статейных мелких примерах не рассматривается подобный случай. И у меня чисто логический затык. Прошу разъяснить.
Работаю с TCPClient'ом
В определённой процедуре делаю:
Но вот если по каким-то причинам на той стороне никто не отвечает, прога висит секунд 15.
Конечно хочется засунуть client.Connet в другой процесс. Что я и попробовал и, как и ожидал, результата не получил. Я так понимаю, другой процесс - это как параллельная вселенная)) если там выполняешь коннект, то там вроде как и работай)
Как же мне всё-таки ВОЗМОЖНО-виснущую команду коннекта запихать в другой процесс и потом с ней работать? Я где-то чо-то явно не понимаю)
И сразу же второй вопрос. Делегаты.
В тех примерах, которые я находил в инете, рассматривается всегда случай необходимости использования одного объекта другого потока и одного его метода (TextBox1.Text = ... или вроде того). А что мне делать со всем моим сопутствующим барахлом, что вы видите в коде? Для каждого делать свой делегат и процедуру делегата?? В это я не могу поверить. Наверняка существует какое-то элегантное решения "межвселенского" общения. Не подскажете? Буду очень спасибо говорить)
Решение задачи: «Использование объекта из другого потока»
textual
Листинг программы
Public client As System.Net.Sockets.TcpClient Delegate Sub _Dlgt() Sub TryConnect() client = New System.Net.Sockets.TcpClient 'отправляеи запрос в асинхронный поток подключения, который ни как не повляет на работу основного потока client.BeginConnect("адрес", порт, New System.AsyncCallback(AddressOf AConnect), client) End Sub Sub AConnect(ByVal asyncResult As IAsyncResult) 'вызов AConnect происходит в конце попытки подключения 'здесь без всяких разборов результата происход вызов Invoke формы в основной поток Me.Invoke(New _Dlgt(AddressOf ConnectFinish)) End Sub Sub ConnectFinish() 'проверяем состояние If client.Connected Then 'если есть подключение... Else 'если нет End If End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д