为什么变量值会异常变化

时间:2011-06-09 09:58:27

标签: c# .net visual-studio-2005

我有这样的代码,在这个上下文中HandleDisconnectEventCB将在客户端有一些修改后的未保存数据并从服务器断开连接(删除网络电缆)时触发,然后它将使'clientWithLock = 0'并将从集合中删除如下所示代码。但现在问题是其他连接的客户端无法进行更改,它显示'clientWithLock'有一些数据不为零,因为它会显示另一个用户正在更新数据请等待。这里有没有badlogic

private static int clientWithLock = 0;

static private void HandleDisconnectEventCB(SPD.SPD_serverLocationType loc,
                                            string server, int clientId,
                                            object passback)
{
    // Remove lock if necessary
    if (clientWithLock == clientId) clientWithLock = 0;

    // Remove client from client list and end replicated display sessions
    for (int i = 0; i < clients.Count; i++)
    {
        SPURTclient sc = (SPURTclient)clients[i];
        if (sc.ClientId == clientId)
        {
            .
            .
            clients.RemoveAt(i);
            break;

1 个答案:

答案 0 :(得分:2)

如果你快速连续多次断开连接,那么使clientwithlock静态会让你在这里遇到各种麻烦。我建议要么让整个操作无状态,所以'ClientWithLock'作为参数传递给事件,你根据传递的所有参数操作静态函数。如果“ClientWithLock”快速连续更新两次以断开连接,则行为将非常奇怪。

或者,实例化整个类和操作,以便断开处理程序在逐个类的基础上实例化,如果让整个无状态的东西不适合你。