Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置静态int时更改表单标签文本值_C#_.net - Fatal编程技术网

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

C# 设置静态int时更改表单标签文本值,c#,.net,C#,.net,当从另一个静态void更改静态int值时,我正在尝试更改表单标签的文本值(frmwebit.ConnectedUserCount.text) 基本上:它是一个简单的web服务器,当每个页面都被服务时,我试图跟踪连接的用户。这似乎是工作,但形式标签没有得到改变,虽然 /** * @type int Total connected users. */ private static int _connectedUsers = 0; public static int connectedUser

当从另一个静态void更改静态int值时,我正在尝试更改表单标签的文本值(
frmwebit.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;
        }
}

这是在web服务器上运行的WinForms应用程序吗?或者这是一个网络表单

在任何情况下,您都不会显示以下表格:

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);
    }
}

当然,该引用必须与表单的实例一起设置。因为它是
静态的
,所以它必须在静态初始值设定项中。或者它可以是一个动态获取表单实例的
get
,而不是一个自动实现的属性。很难就最佳方法提出建议,因为我不知道此代码如何与表单实例交互。

每次设置静态时,您都在创建一个新表单。您是否有表单的静态引用?此应用程序是多线程的吗?(我假设是这样,因为web服务器可能随时接收请求。)您需要添加锁定以正确保护静态值。不要忘记同步静态值。@xxbbcc:实际上,线程安全可能会成为这里的一个问题。这个应用程序架构的整体情况可能有一些缺陷。哈哈,是的,看起来很可疑。:)也许这只是一个实验。lol对不起,这只是一个宠物项目,因为我基本上是在这个过程中自学C#@c0nfus3d1:在这种情况下,您面临的主要问题是,同一类型的两个实例实际上并不相同。例如,想象一下,在现实生活中,如果你买了两辆完全相同的车。他们各方面都一样,但他们不是同一辆车。在这种情况下,您需要代码引用现有实例,而不是创建新实例。