다중 스레드에 대한 일부 작업을 수행하고 있습니다. 그때winform의 스레드에서 UI를 변경할 수 없습니다.
while (true)
{
serverStream = clientSocket.GetStream();
byte[] inStream = new byte[10025];
int buffSize = clientSocket.ReceiveBufferSize;
serverStream.Read(inStream, 0, buffSize);
string returndata = System.Text.Encoding.ASCII.GetString(inStream);
readData = "" + returndata;
if (readData.IndexOf("$") != -1)
{
readData = readData.Substring(0, readData.IndexOf("$"));
newFrm = new Form1();
newFrm.doNetworkMethod(readData);
}
}
: ctThread = new Thread(getMessage); ctThread.Start();
여기에서의 getMessage 기능 :
은 그때 서버에서 메시지를들을 것이다 스레드 호출의 getMessage를 작성, clientSocket.Connect("127.0.0.1", 8888);
: 첫째, 소켓 서버에 연결 형태로 만들기 1 Form1에이 Form2로 데이터를 전송하는 형식 2에 doNetworkMethod을 만들고,로드 이벤트 함수를 Form2에 나는 그 전에, 나는이 위임 public delegate void doNetworkDelegate(string readData); public delegate void displayChatDelegate(string readData);
을 만들고 마지막으로, 나는 2 FUNC를 만들어 doNetworkDelegate w = doNetworkMethod; w.BeginInvoke(readData, null, null);
이 기 전화 :
public void doNetworkMethod(string readData)
{
if (readData != null)
{
if (!this.IsHandleCreated) this.CreateHandle();
this.Invoke(new displayChatDelegate(displayChatMethod), new object[] { readData.ToString() });
Thread.Sleep(1);
}
}
public void displayChatMethod(string readData)
{
lock (this)
{
textBox1.Text = textBox1.Text + readData;
textBox2.Text = textBox2.Text + readData;
}
}
하지만 textBox1
및 textBox2
가되어, readData 내용을 표시하지하지만 난 MessageBox.show(readData)
을 만들 때 않습니다.
도움 주셔서 감사합니다.