Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше передавать текст из потока? 
:(
    Опции темы
transparent
Дата 10.7.2011, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 7.5.2011

Репутация: нет
Всего: нет



ребят, ну неужели не кто не в курсе...
Что лучше
при чтении сразу посылать в процедуру инвока
Код:
readed = cs.Read(buff, 0, buff.Length)
 UDelegate(System.Text.Encoding.Default.GetString(buff, 0, readed))

или еще раз инвокать элемент

Код:
readed = cs.Read(buff, 0, buff.Length)
 TextBox2.Invoke(New txtUpdateDelegat(AddressOf UDelegate), System.Text.Encoding.Default.GetString(buff, 0, readed))

....
Напомню что чтение идет в цикле do..loop


а вот сама процедура инвока

Код:
Private Delegate Sub txtUpdateDelegat(ByVal txtText As String)
    Private Sub UDelegate(ByVal txtText As String)
        If Not TextBox2.InvokeRequired Then
            TextBox2.AppendText(txtText & ControlChars.CrLf)
        Else
            Dim UD As System.Delegate = New txtUpdateDelegat(AddressOf UDelegate)
            TextBox2.BeginInvoke(UD, New String() {txtText})
        End If
    End Sub 
PM MAIL   Вверх
diadiavova
Дата 11.7.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Цитата(transparent @  11.7.2011,  00:10 Найти цитируемый пост)
ребят, ну неужели не кто не в курсе...

Такое ощущение, что это не топикстарт, а давно обсуждающаяся тема. 


M
diadiavova
Оформляй пост таким образом, чтобы можно было понять суть вопроса. И не забывай помечать код соответствующими тегами. Не в первый раз ведь на форуме



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
transparent
Дата 11.7.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 7.5.2011

Репутация: нет
Всего: нет



читаю присланный текст 

Код

Do While c.Connected
            Do While cs.DataAvailable
                readed = cs.Read(buff, 0, buff.Length)
            Loop


и вот не знаю каким лучше способом отправлять в процедуру передачи в основной поток
так: 

Код

Do While c.Connected
            Do While cs.DataAvailable
                readed = cs.Read(buff, 0, buff.Length)
 TextBox2.Invoke(New txtUpdateDelegat(AddressOf UDelegate), System.Text.Encoding.Default.GetString(buff, 0, readed))
            Loop


или так: 
Код

Do While c.Connected
            Do While cs.DataAvailable
                readed = cs.Read(buff, 0, buff.Length)
 UDelegate(System.Text.Encoding.Default.GetString(buff, 0, readed))
            Loop


а вот сама процедура обработки текста через инвок

Код

Private Delegate Sub txtUpdateDelegat(ByVal txtText As String)

    Private Sub UDelegate(ByVal txtText As String)
        If Not TextBox2.InvokeRequired Then
            TextBox2.AppendText(txtText & ControlChars.CrLf)
        Else
            Dim UD As System.Delegate = New txtUpdateDelegat(AddressOf UDelegate)
            TextBox2.BeginInvoke(UD, New String() {txtText})
        End If
        'Me.Activate()
    End Sub 

PM MAIL   Вверх
transparent
Дата 11.7.2011, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 7.5.2011

Репутация: нет
Всего: нет



вот полный код того примера...я его уже дополнил..но тут привожу именно пример(немой), и вот с этим кодом я и работаю, а то есть пытаюсь понять как лучше инвокать текст, дабы не было ошибки не своего потока...Все операции в потоках

Код

Код:
Dim s As TcpListener

Sub AnySub() 'Запускает сервера
    s = New TcpListener("localhost", 1000)
   s.Start()
   Dim t As New Thread(Listening)
   t.Start()
End Sub

Sub Listening()
   Do
      Dim t As New Thread(AcceptClient)
      t.Start(s.AcceptTcpClient())
   Loop
End Sub

Sub AcceptClient(client As Object)
   Dim c As TcpClient = CType(client, TcpClient)
   Dim cs As NetworkStream = c.GetStream()
   Dim readed As Integer = 0
   Dim buff(1023) As Byte
   
   Do While c.Connected
      Do While cs.DataAvailable
         readed = cs.Read(buff, 0, buff.Length)
         Dim ClientRequest As String = System.Text.Encoding.ASCII.GetString(buff, 0, readed) 'Запрос
         'Обработка клиентского запроса...
         Dim ServerResponse() As Byte = System.Text.Encoding.ASCII.GetBytes("<Server response string>") 'Ответ
         cs.Write(ServerResponse, 0, ServerResponse.Length)
      Loop
      Thread.Sleep(15)
   Loop
   cs.Close()
   cs.Dispose()
   c.Close()
End Sub

Клиент:
Код:
Dim c As TcpClient
Dim cs As NetworkStream

Sub AnySub 'Подготавливает клиента к общению с сервером
      c = New TcpClient("localhost", 1000)
      cs = c.GetStream()
      Dim t As New Thread(RecieveAnswer)
      t.Start()
End Sub

Sub RecieveAnswer()
   Dim readed As Integer = 0
   Dim buff(1023) As Byte
   Do While c.Connected
      Do While cs.DataAvailable
         readed = cs.Read(buff, 0, buff.Length)
         MsgBox(System.Text.Encoding.ASCII.GetString(buff, 0, readed))
      Loop
      Thread.Sleep(15);
   Loop
End Sub

Sub SendRequest 'Отправляет запрос серверу
   If c IsNot Nothing And c.Connected Then
      Dim buff() As Byte = Encoding.ASCII.GetBytes("<Request string>")
      cs.Write(buff, 0, buff.Length)
   Else
      'Подключение отсутствует
   End If
End Sub

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.