C# 设置静态int时更改表单标签文本值
当从另一个静态void更改静态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
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:在这种情况下,您面临的主要问题是,同一类型的两个实例实际上并不相同。例如,想象一下,在现实生活中,如果你买了两辆完全相同的车。他们各方面都一样,但他们不是同一辆车。在这种情况下,您需要代码引用现有实例,而不是创建新实例。