0
所以我想在后台代码中运行的线程中更新我的TextBox,名为“ServerDataArea”。asp.net textbox不更新后面的表格代码
形式:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox id="ServerDataArea" TextMode="multiline" Columns="50" Rows="15" runat="server" Enabled="false" />
<br />
<asp:TextBox ID="Message" runat="server" ></asp:TextBox>
<asp:Button ID="SendMessage" runat="server" OnClick="appendMessage_Click" Text="Send" />
</ContentTemplate>
</asp:UpdatePanel>
这是我的代码后面怎么做更新这个文本框:
public delegate void MyDelegate(string text);
private MyDelegate d;
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
d = new MyDelegate(MyMethod);
}
// create connection
// ...
// create thread
if(Session["thread"] == null)
{
Session["thread"] = new Thread(new ThreadStart(RunReceiver));
}
Thread receiverThread = (Thread)Session["thread"];
if (!receiverThread.IsAlive)
{
receiverThread.Start();
Debug.WriteLine("Receiver thread started!");
}
}
/// <summary>
/// receive messages from the server
/// </summary>
private void RunReceiver()
{
byte[] data = null;
while (con.GetClient().Connected)
{
// if stream contains data to recieve
if (con.GetStream().DataAvailable)
{
Debug.WriteLine("client receiving some data");
// create new buffer to store received data
data = new Byte[256];
// read data from stream
Int32 bytes = con.GetStream().Read(data, 0, data.Length);
// convert to readable text
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
// display message in chat
d(responseData);
}
Thread.Sleep(400);
}
}
private void MyMethod(string text)
{
ServerDataArea.Text += text + "\r\n";
}
中的Debug.WriteLine(ServerDataArea.Text)确实告诉我什么应该是在可见文本框,但它是不可见的,我只是不知道如何使其可见..
答复谢谢,我更换了启用=“假”只读=”真“,因为默认Enabled = true,但我得到相同的结果,文本框仍然是空白的。 – jt123
说实话,在黑暗中有点刺,真正的问题是与你的线程有关,也就是说你的代码在UI线程中运行在一个单独的线程上,UI将只允许通过UI线程。 –
好吧,所以我更新了代码,向您展示了如何在添加委托时执行相应的代码,但是我得到的结果相同,因此我必须在那里做错了什么? – jt123