将数据从后台线程传输到网页上的文本框

时间:2016-12-13 23:56:47

标签: c# asp.net multithreading webforms backgroundworker

我试图在我的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;
}

1 个答案:

答案 0 :(得分:2)

这种方法在WebForms中不起作用,因为在请求处理之后,所有线程都在等待新请求时被挂起。您应该引入一个轮询javascript,它将调用服务器端进行更新。

此外,您应该从您的IP套接字接收器的Web应用程序中移出。您的选项是某种守护进程(Windows服务)或WCF绑定。