问题描述
各位大神.有个问题求教.C#中,我做了两个窗体.这是一个客户端,第一个窗体是登录,第二个是接收数据显示数据的窗体..Form1中:publicstaticstringMsg_Str;voidMsgtoStr(stringMsg){Msg_Str=Msg;//从服务端返回的数据附值给Msg_Str;}voidthreadPro()//委托{MethodInvokerMethodIn=newMethodInvoker(ShowForm);BeginInvoke(MethodIn);}voidShowForm()//调用窗体{Form2form2=newForm2();form2.Show();}voidButton1Click(objectsender,EventArgse){this.Hide();Threadthrpro=newThread(threadPro);thrpro.Start();}Msg是接收到的数据.我附值给了Msg_Str.Form2中:voidButton1Click(objectsender,EventArgse){Form1.SendSelectMsg(textBox1.Text);//发送数据richTextBox1.AppendText(Form1.Msg_Str);//把反回的数据加到richTextBox中}为什么点击Form2中的按钮richTextBox1中总是显示上一次返回的数据?我的问题出在哪?有什么办法可以解决么?
解决方案
解决方案二:
看不太懂你要什么,登录后Form1.Msg_Str的值只赋值一次,当然一直是那个值了。
解决方案三:
这个MsgtoStr方法才是给Msg_Str赋值的方法,你那里调用了??
解决方案四:
SendSelectMsg做了什么?
解决方案五:
SendSelectMsg发送数据到服务器端,服务器端返回的数据通过MsgtoStr更新了Msg_Str,所以每点一次Form2里的按钮,Msg_Str都会改变,只是在Form2里返回的是前一次的Msg_Str,我在Form1里收到服务器返回数据做了个MessageBox.Show(Msg_Str),在弹出窗口里显示的是实时返回的数据.在Form2里的richTextBox1显示的是上一次返回的数据
解决方案六:
新手不要胡乱抄代码打开个窗体用委托?都什么思路直接在主线程里写代码打开窗体不就得了
解决方案七:
Form1.SendSelectMsg(textBox1.Text);//发送数据richTextBox1.AppendText(Form1.Msg_Str);//把反回的数据加到richTextBox中你这是把网络通信在当单机版玩那刚发送完数据,哪里有数据返回除非你不用线程,而完全使用单线程的思路来做通信
解决方案八:
以上代码是不全的...这两个窗体里都是客户端,服务端里写好了收到数据处理后返回数据.客户端Form1里已经可以正常收到数据,我另外加了个弹窗显示返回的数据做为对照..客户端Form2向服务端发送数据的时候返回的数据在Form1的Msg_Str里,这些都是正常的,第一个窗体没有任何问题.现在问题是我在Form2里取Form1.Msg_Str时是上一次点击按钮返回的数据..关于打开窗体用委托,是因为我直接调用Form2,Form2发送一次数据(也就是点一次按钮后),Form2就无响应了,应该是被挂起了.而我用新建线程打开Form2,Form1和Form2都隐藏了.用了委托后都正常.所以就这么做了....呵呵...