设置静态int时更改表单标签文本值

时间:2013-12-30 18:24:28

标签: c# .net

我正在尝试在从另一个静态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;
        }
}

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。由于我不知道此代码如何与表单实例交互,因此很难就最佳方法提出建议。