Экземпляр класса C # - PullRequest
       1

Экземпляр класса C #

3 голосов
/ 23 апреля 2011

Я новичок в программировании, и я прочитал несколько уроков. Мне все еще неясно, о чем:

При нажатии на кнопку это событие создает экземпляр класса:

private void button2_Click(object sender, RoutedEventArgs e)
{
    int a = 1;
    myClass test = new myClass(a);
}

myClass выполняет долгую обработку (несколько минут). Если я нажму 5 раз на кнопку, это создаст 5 экземпляров? Или «тест» будет «перезаписан» 4 раза?

Спасибо

Ответы [ 2 ]

8 голосов
/ 23 апреля 2011

Если я нажму 5 раз на кнопку, это создаст 5 экземпляров?Или «тестовый» экземпляр будет «перезаписан» 4 раза?

Да, он собирается создать 5 отдельных экземпляров.Вы создаете объект, который сразу же выходит из области видимости после его создания, поэтому в следующий раз будет создан другой экземпляр того же класса.

Я предполагаю, что вы планировали выполнить обработку как часть вашего конструктораимейте в виду, что это заблокирует поток пользовательского интерфейса, ваша программа "зависнет" - если вы хотите выполнить долгую обработку, вам не следует делать это в потоке пользовательского интерфейса - посмотрите, например, BackgroundWorker .

3 голосов
/ 23 апреля 2011

Это создаст столько экземпляров, на которые вы нажмете. Однако, если работа является синхронной и блокирует поток пользовательского интерфейса, вы не можете щелкнуть по нему еще раз, пока работа не будет завершена. Если ваша работа асинхронная, она будет создавать новый экземпляр каждый раз, когда вы нажимаете.

Вместо этого попробуйте ...

private myClass _test;
private void button2_Click(object sender, RoutedEventArgs e)
{
    int a = 1;

    if (_test == null)
    {
        _test = new myClass(a);
    }
}

Хотя я бы не рекомендовал выполнять синхронную работу в потоке пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...