我正在尝试在从另一个静态void更改静态int值时更改表单标签的文本值(frmWebInput.ConnectedUserCount.Text
)...
基本上:它是一个简单的Web服务器,我正在尝试在每个页面服务时跟踪连接的用户。它似乎有效,但表格标签虽然没有改变?
/**
* @type int Total connected users.
*/
private static int _connectedUsers = 0;
public static int connectedUsers {
get { return _connectedUsers; }
set
{
_connectedUsers = value;
frmWebInput MyForm = new frmWebInput();
MyForm.ConnectedUserCount.Text = String.Format("Connected Users: {0}", value);
}
}
public static void clientListener()
{
while (true)
{
try
{
HttpListenerContext request = listener.GetContext();
ThreadPool.QueueUserWorkItem(processRequest, request);
}
catch (Exception e) { }
}
}
public static void processRequest(object listenerContext)
{
try
{
connectedUsers = connectedUsers + 1;
}
}
答案 0 :(得分:1)
这是在Web服务器上运行的WinForms应用程序吗?或者这是一个WebForm?
无论如何,你永远不会出示表格:
frmWebInput MyForm = new frmWebInput();
MyForm.ConnectedUserCount.Text = String.Format("Connected Users: {0}", value);
每次设置值时,都会创建frmWebInput
的新实例并在该实例上设置文本。但你永远不会表现出来。如果已经在应用程序的其他位置显示了一个,则永远不会设置其文本。
您需要引用正在显示的表单的实例。类似的东西:
private static frmWebInput MyForm { get; set; }
private static int _connectedUsers = 0;
public static int connectedUsers {
get { return _connectedUsers; }
set
{
_connectedUsers = value;
MyForm.ConnectedUserCount.Text = String.Format("Connected Users: {0}", value);
}
}
当然,必须使用表单实例设置该引用。因为它是static
,所以它必须在静态初始化器中。无论是自动实现的属性还是代替自动实现的属性,它都可以是动态提取表单实例的get
。由于我不知道此代码如何与表单实例交互,因此很难就最佳方法提出建议。