2016-12-13 31 views
0

我想在我的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

[从另一个线程写入文本框?]可能的重复?(http://stackoverflow.com/questions/519233/writing-to-a-textbox-from-another-thread) –

+1

这不是重复的问题是关于webforms。 – VMAtm

回答

2

这种做法是行不通的WebForms的,因为请求处理所有线程都悬浮在等待新的请求后。您应该引入一个轮询JavaScript,它将调用服务器端进行更新。

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

+0

所以线程不会继续在服务器的后台运行...... – Viper

+0

但是我已经实现线程的方式是大多数情况下它在请求期间完成所有工作。只有少数情况下,我会在ip socket接收器上看到未经请求的数据(这是我认为线程是一个好主意的唯一原因)。我仍然应该能够从线程获取数据并将其放入文本框中,对吗?我知道InvokeRequired不起作用。建议... – Viper

+0

你的线程只在请求处理过程中才起作用。所以,*可能*,你可以从IP套接字获得一些数据,但我不会依赖这个。创建一个ajax调用服务器端的某种服务,并用jquery更新文本框。 – VMAtm

相关问题