Почему значение переменной меняется необычно - PullRequest
1 голос
/ 09 июня 2011

У меня есть такой код, в этом контексте HandleDisconnectEventCB будет срабатывать, когда клиент имеет какие-либо изменения без сохраненных данных и отсоединен (отсоединить сетевой кабель) от сервера, затем он установит 'clientWithLock = 0' и удалит из коллекции, что показано ниже кода. Но теперь проблема в том, что другие подключенные клиенты не могут вносить изменения, это показывает, что в clientWithLock есть некоторые данные, отличные от нуля, из-за того, что он покажет, что другой пользователь обновляет данные, пожалуйста, подождите.

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 Ответ

2 голосов
/ 09 июня 2011

Создание статического состояния clientwithlock приведет к возникновению у вас всех видов головной боли, если у вас будет несколько разрывов в быстрой последовательности. Я бы рекомендовал либо сделать всю операцию без сохранения состояния, поэтому «ClientWithLock» передается как параметр события, и вы используете статическую функцию на основе всех переданных параметров. Если «ClientWithLock» обновляется дважды в быстрой последовательности для разъединений, поведение будет довольно странным.

Или создание экземпляра всего класса и операции таким образом, чтобы обработчик разъединения создавался для каждого класса в отдельности, если для вас все это не имеет состояния.

...