我在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。 我该怎么办?
答案 0 :(得分:2)
我认为您在Web UI上不需要这个。每个客户端都会收到自己的TextBox,而WebServer不会将TextBox重用于多个请求。我在这里想念一下吗?
答案 1 :(得分:0)
如果你想按照我的想法行事,那就不可能了。如果您的事件处理程序是由服务器上的某个后台进程调用的,那么您怎么可能更新文本框?你要更新哪个文本框?您尝试更新的文本框都在客户端的Web浏览器上,而不是您的服务器上。
无论如何,你的问题的答案是没有InvokeRequired或Invoke方法,因为在ASP.NET控件中无法跨线程访问。只有当前处理Web请求的线程才能访问所服务页面的元素。
您需要重新考虑您的方法。您无法像在桌面应用程序中那样在Web应用程序中执行任何操作。