#vb.net
#vb.net
Вопрос:
В основном мой сервер отправляет клиенту строку, которая затем разбивается на стороне клиента с использованием Dim data() As String = receivedString.Split("|"c)
примера строки было бы MESSAGE|TestUser|This Is The Message
то, что я хочу сделать, когда эта строка будет получена, — это сначала проверить, отправлял ли этот пользователь сообщение этому клиенту ранее (уже должно появиться окно с текущим «чатом»), отправил ли пользователь сообщение, прежде чем добавить текст, чтобы указать расширенное текстовое поле. если пользователь не отправил сообщение до создания нового экземпляра «окна чата», а затем все будущие сообщения с сервера отправляются в этот экземпляр окна.
спасибо, Хоулахан
Dim data() As String = message.Split("|"c)
Select Case data(0)
Case "MESSAGE"
Try
If conversations.ContainsKey(data(1)) Then
Dim convoWindow As ChatWindow
convoWindow = conversations.Item(data(1))
convoWindow.RichTextBox1.AppendText(data(2))
Else
conversations.Add(data(1), New ChatWindow())
Dim convoWindow As ChatWindow
convoWindow = conversations.Item(data(1))
convoWindow.Show()
convoWindow.RichTextBox1.AppendText(data(2))
End If
Ответ №1:
Вы могли бы добиться этого множеством способов. Первое, что приходит мне в голову, — это создать объект словаря, который связывает ваш TestUser
как ключ в ассоциации с Form
, представляющим диалог. например
conversations.Add(testUser, new FormConversation(...))
При получении сообщения вы должны ссылаться на словарь, который отслеживает все ваши текущие разговоры.
Если не существует ключа с именем пользователя, создайте новую форму и добавьте пользователя в словарь вместе со ссылкой на форму. Если один существует, который может быть извлечен из словаря на основе имени пользователя, просто выведите его на передний план и передайте ему сообщение.
Комментарии:
1. Я обновил свой первый пост, пытаясь сделать то, что вы объяснили, я не уверен, что я на правильном пути, но это создает окно чата, но это окно просто зависает, не совсем уверен, почему спасибо
2. Я не уверен, что код, который я опубликовал, выполняется без каких-либо ошибок во время выполнения, но новый экземпляр формы недоступен, действует так, как будто он разбился
3. @Houlahan Согласно вашему приведенному выше коду, вы не создаете экземпляр своей формы. Вы просто объявляете это. например
Dim convoWindow As New ChatWindow()
4. но разве я не создаю экземпляр своей формы, когда я создаю ее в словаре?
conversations.Add(data(1), New ChatWindow())
а затем просто объявить его как элемент в словаре (новый экземпляр окна чата)?5. я нашел проблему! это не выдало ошибку, но я мог видеть это в трассировке стека, в котором richtextbox, в который я пытался добавить данные, выдавал ошибку перекрестного потока 🙂 спасибо за вашу помощь!