【发布时间】:2016-12-22 23:38:53
【问题描述】:
我正在使用 ASP.NET 和 C# 编写 Web 应用程序。
当页面加载时,它必须侦听(IP 连接),当它收到消息时,应该使用该值更新标签(从回调更新 UI)。 简化我的代码,我在主页上有这个:
protected void Page_Load(object sender, EventArgs e)
{
Thread listeningThread = new Thread(new ThreadStart(StartListening));
listeningThread.Start();
}
这是 aspx 文件中的标签:
<asp:Label ID="MyLabel" runat="server" EnableViewState="False"></asp:Label>
然后,这是我的回调函数:
private void StartListening()
{
Action<string> callbackRead = (string message) =>
{
myLabel.text = message;
};
}
消息正确到达,如果我在回调中放置一个断点,我可以看到它是如何进入其中的。尽管如此,UI 并未更新。当然,如果我写 myLabel.text = "Whatever";在 Page_Load 部分,它工作正常。
我已经尝试过使用网格和 DataSource + DataBind()(我遵循了 this 教程),但我仍然遇到同样的问题,如果我在 Page_Load 中而不是在回调中这样做,它工作正常。
我在另一个问题中阅读了很多关于此的内容,但没有一个答案能解决我的问题(大多数是针对 WinForms 等的)
我是这个领域的新手,我知道我可能遗漏了一些东西。请问你能帮帮我吗?如何实现我想要的正确方法?提前致谢!
【问题讨论】:
-
正确的方法是SignalR。
-
我在项目的其他部分使用 SignalR 但没有考虑这个,我会尝试。
-
我一直在尝试使用这个:var context = GlobalHost.ConnectionManager.GetHubContext
(); context.Clients.All.broadcastMessage("name", "message");但它什么也没做。它仅在我在回调之外使用它时才有效,例如,当我按下按钮时。
标签: c# asp.net multithreading user-interface