我试图在我的C#WebForm应用程序中使用后台线程(这不是Windows窗体问题)。线程监视TCP / IP连接,查找要在接收端出现的数据。当数据出现时,我想将其写入我的网页上的文本框中。问题是,当我尝试从该线程写入文本框时,实际上没有任何内容写入文本框,然后加载网页。我知道这是一个跨线程问题而不是页面加载问题。
我的程序等待将数据写入"文本框"在渲染网页之前。我尝试使用代表但是没有用。此外,我已经搜索了一个解决方案,但大多数答案处理Windows窗体和WebForms似乎采取不同的行动。
对于我的C#WebForm应用程序,如何访问后台线程中创建的数据,以便将其加载到我的网页上的文本框中?
Thread ipThread;
protected void Page_Load(object sender, EventArgs e)
{
ipThread = new Thread(() => ipSocketRcv();
ipThread.IsBackground = true;
ipThread.Priority = ThreadPriority.BelowNormal;
ipThread.Start();
}
void ipSocketRcv()
{
while (true)
{
if receive data...
myTextBox.Text = data; **//This does not work**
finished = true;
}
}
protected void SendCmd_Click(object sender, EventArgs e)
{
//send command over ip connection when button pressed
waitToLoad(); //Then wait for data to be received before rendering page
}
private void waitToLoad()
{
while (!finished)
{
Thread.Sleep(0);
}
finished = false;
}
答案 0 :(得分:2)
这种方法在WebForms中不起作用,因为在请求处理之后,所有线程都在等待新请求时被挂起。您应该引入一个轮询javascript,它将调用服务器端进行更新。
此外,您应该从您的IP套接字接收器的Web应用程序中移出。您的选项是某种守护进程(Windows服务)或WCF绑定。