Просто для академических целей, im приспосабливая предыдущий код из формы Windows к WPF, дело в том, что я не могу понять, как работает invoke, надеюсь, кто-то может пролить свет, пока я читаю некоторые учебники и объясните мне, что я мог бы сделать, адаптируя этот код.Обновление WPF TextBlock
Каждый раз, когда кто-то отправляет сообщение на send_click, он отправляет сервер, на который отправляются все подключенные сокеты. Мой вопрос: как мне адаптировать этот код, чтобы сделать текстовый блок «обновляемым»? В нем говорится, что он уже используется другим потоком (основной нить). Это код, который содержит мое приложение. Заранее спасибо!
Обновление № 1: Это моя первая попытка использования диспетчера invoke http://gyazo.com/42008aacbec2f8494bb7c6c33889d9ad, однако я не понимаю причину этого walloftext.
public Lobby()
{
InitializeComponent();
ctThread = new Thread(getMessage);
ctThread.Start();
clientSocket.Connect("127.0.0.1", 8888);
serverStream = clientSocket.GetStream();
}
TcpClient clientSocket = new System.Net.Sockets.TcpClient();
NetworkStream serverStream = default(NetworkStream);
string readData = null;
Thread ctThread;
private void btnSend_Click(object sender, RoutedEventArgs e)
{
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(txtInput.Text);
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
}
private void getMessage()
{
while (true)
{
serverStream = clientSocket.GetStream();
int buffSize = 0;
byte[] inStream = new byte[10025];
buffSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, buffSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
readData = "" + returndata;
Dispatcher.BeginInvoke(new Action(() =>
{
txtContent.Text = txtContent.Text + Environment.NewLine + " >> " + readData;
}));
}
}
По-прежнему работает мой mvvm, altho это дает мне лучший результат с этим, дело в том, что теперь после первой ошибки, которую я получаю http://gyazo.com/42008aacbec2f8494bb7c6c33889d9ad, используя перерывы, я решил, что он не отправляет больше данных на сервер, он останавливается на сервереStream, у меня есть еще 2 приложения Windows Forms для тестирования, и они хорошо связывают себя с одним и тем же кодом (кроме вызывающей части, на windowsform theres method.invoke). В любом случае, спасибо за помощь при вызове! – abr
Я знаю, что случилось, неважно! Спасибо за помощь! – abr
@abr Отлично! Рад, что ты заработал. – BradleyDotNET