我正在使用 SignalR 来实现一个通知系统来在我的应用程序实例之间交换信息。我有以下集线器类:
[HubName("OpenHub")]
public class OpenHub:Hub
{
public void DetermineLength(string message)
{
Clients.All.RecieveNewInfo(newMessage);
//How to use something like the following line?
//concerning that Form1 is loaded at application startup
//and I should not create a new instance
//Form1.lstMessages.Add(newMessage);
}
}
然而,我必须更新一些 UI 控件,包括一个标签和一个列表框,以记录到达的任何新信息。除了在表单代码中定义我的类之外,当我在不同的类中定义我的集线器时,如何更新 Form 对象以显示这些新信息?
您可以在Program
类或Form1
类中使用公共静态属性来保存对它的引用。
例如在你Program
使用之前Application.Run(new Form1());
你可以这样做:
public static Form1 MainForm { get; set; }
然后在 Main()
MainForm = new Form1();
Application.Run(MainForm);
您现在可以从集线器访问您的表单:
[HubName("OpenHub")]
public class OpenHub:Hub
{
public void DetermineLength(string message)
{
Clients.All.RecieveNewInfo(newMessage);
Program.MainForm.lstMessages.Add(newMessage);
}
}
当然,这lstMessages
应该是公开的。或者最好在表单中公开一些公共方法来与之通信。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句