diff --git a/chatclient/MainWindow.xaml b/chatclient/MainWindow.xaml
index f77e9ed..094aebb 100644
--- a/chatclient/MainWindow.xaml
+++ b/chatclient/MainWindow.xaml
@@ -112,21 +112,18 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -143,5 +140,7 @@
+
+
diff --git a/chatclient/MainWindow.xaml.cs b/chatclient/MainWindow.xaml.cs
index c2b8912..ed8f474 100644
--- a/chatclient/MainWindow.xaml.cs
+++ b/chatclient/MainWindow.xaml.cs
@@ -240,11 +240,11 @@ namespace chatclient
log.Error("处理响应时发生错误", ex);
}
}
- private void SendMessage_Click(object sender, RoutedEventArgs e)
+ private async void SendMessage_Click(object sender, RoutedEventArgs e)
{
- SendMessage();
+ await SendMessage();
}
- private void SendMessage()
+ private async Task SendMessage()
{
if (string.IsNullOrWhiteSpace(txtMessage.Text))
return;
@@ -274,31 +274,53 @@ namespace chatclient
string ChatJsonData = JsonSerializer.Serialize(newChatMessage);
byte[] dataBytes = Encoding.UTF8.GetBytes(ChatJsonData);
log.Info($"向服务器聊天信息(长度:{dataBytes.Length})");
- if (Client != null)
+ // 检查Socket是否可用
+ if (Client?.Connected == true)
{
- if (Client.Connected)
+ Client.Send(dataBytes);
+ Application.Current.Dispatcher.Invoke(() =>
{
- Client.Send(dataBytes);
- }
- else
- {
- try
- {
- log.Info("未连接服务器,尝试连接");
- Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- Client.Connect(IPAddress.Parse(Server.ServerIP), Server.ServerPort);
- }
- catch (Exception ex)
- {
- log.Error(ex);
- Client.Close();
- }
- }
+ txtMessage.Clear();
+ });
+ return;
}
+ log.Info("未连接服务器,尝试异步连接");
+ // 异步连接操作
+ await Task.Run(() =>
+ {
+ try
+ {
+ Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
+ Client?.Connect(IPAddress.Parse(Server.ServerIP), Server.ServerPort);
+ StartReceive();
+ Client?.Send(dataBytes);
+
+ }
+ catch (Exception ex)
+ {
+ log.Error($"连接失败: {ex.Message}");
+ Client?.Close();
+ Application.Current.Dispatcher.Invoke(() =>
+ {
+ var mainWindow = Application.Current.Windows.OfType().FirstOrDefault();
+ if (mainWindow != null)
+ {
+ QueueMessage("连接失败,请检查网络设置或服务器状态。");
+ }
+ });
+ }
+ });
// 添加到消息列表
//Messages.Add(newMessage);
- // 清空输入框
- txtMessage.Clear();
+ }
+ private void QueueMessage(string message)
+ {
+ if (SnackbarThree.MessageQueue is { } messageQueue)
+ {
+ //use the message queue to send a message.
+ //the message queue can be called from any thread
+ Task.Factory.StartNew(() => messageQueue.Enqueue(message));
+ }
}
}
}
\ No newline at end of file