Я делаю многопоточный чат-сервер и чат-клиент.У клиента есть Form1 с именем Login и Form2 с именем MainProgram.Следующий код от "Логин".То, что я пытаюсь сделать, это перейти от входа в MainProgram ...
MainProgram mP = new MainProgram(clientSocket, username);
mP.Closed += (s, args) => this.Close();
this.Hide();
mP.ShowDialog();
mP.Show();
... однако.При назначении mP MainProgram mP = new MainProgram(clientSocket, username);
Код get застрял в указанном здесь потоке:
public MainProgram(TcpClient c, string u)
{
InitializeComponent();
try
{
serverStream = c.GetStream();
clientSocket = c;
username = u;
new Thread(Receive()) { IsBackground = true }.Start();
}
Вот поток:
private ThreadStart Receive()
{
while (true)
{
try
{
byte[] inStream = new byte[1024];
serverStream.Read(inStream, 0, inStream.Length);
string returndata = Encoding.ASCII.GetString(inStream);
returndata = returndata.Substring(0, returndata.IndexOf("$"));
Msg($"{returndata}");
}
catch(Exception e)
{
MessageBox.Show($"{e.Message}\n\n{e.ToString()}");
}
}
}
Обратите внимание, что поток должен запускать этотцикл пока бесконечно, но на заднем плане.Прямо сейчас он не создает новый поток и работает на MainThread.Проблема в том, что я не знаю, как запустить этот поток, не заставляя клиента застрять в цикле while.И не переходя.