使用InvokeRequired for Web.UI所需的帮助

时间:2010-04-11 15:26:59

标签: c# asp.net winforms multithreading

我在C#中有一个多线程应用程序,它试图写入另一个线程创建的Windows.Forms中的TextBox。

由于线程无法修改它们尚未创建的内容,我正在使用下面代码中显示的InvokeRequired来解决此问题。

public delegate void MessageDelegate(Communication message);
void agent_MessageReceived(Communication message)
{
   if (InvokeRequired)
   {
       BeginInvoke(new MessageDelegate(agent_MessageReceived), new object[] { message });
   }
   else
   {
      TextBox1.Text += message.Body;
   }
}

现在我需要对ASP.NET应用程序中的TextBox执行相同的操作,但Web.UI中的TextBox显然既不存在InvokeRequired也不存在BeginInvoke。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

我认为您在Web UI上不需要这个。每个客户端都会收到自己的TextBox,而WebServer不会将TextBox重用于多个请求。我在这里想念一下吗?

答案 1 :(得分:0)

如果你想按照我的想法行事,那就不可能了。如果您的事件处理程序是由服务器上的某个后台进程调用的,那么您怎么可能更新文本框?你要更新哪个文本框?您尝试更新的文本框都在客户端的Web浏览器上,而不是您的服务器上。

无论如何,你的问题的答案是没有InvokeRequired或Invoke方法,因为在ASP.NET控件中无法跨线程访问。只有当前处理Web请求的线程才能访问所服务页面的元素。

您需要重新考虑您的方法。您无法像在桌面应用程序中那样在Web应用程序中执行任何操作。