При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Асинхронное программирование
Элемент управления ProgressBar
Элемент управления ProgressBar применяется для отображения степени завершенности длительных задач, например, копирования файлов или установки программы. Создайте новое приложение и назовите его ProgressBar. Перетаскиваем на форму текстовое поле, две кнопки, PictureBox, ProgressBar и устанавливаем следующие свойства элементов:
pictureBox1, свойство | Значение |
---|---|
Image | Code\Glava7\ProgressBar\Image\FILECOPY.gif |
Maximum | 30000 |
Location | 16; 88 |
Size | 264; 72 |
Visible | False |
Элемент ProgressBar имеет свойство Value, принимающее численное значение, которое отображается на шкале заполнения. Мы установили максимальное значение этой шкалы 30000. При нажатии на кнопку "Ввод" значение, введенное в текстовое поле, будет устанавливаться на шкале:
private void btnEnter_Click(object sender, System.EventArgs e) { try { progressBar1.Value = Convert.ToInt32(textBox1.Text); } catch(Exception) { MessageBox.Show("При выполнении преобразования типов возникла ошибка"); return; } }
При нажатии на кнопку "Пуск" будет запускаться простой процесс, который будет отражать ProgressBar, а также появится стандартный рисунок копирования:
private void btnStart_Click(object sender, System.EventArgs e) { pictureBox1.Visible = true; for(int i =0; i<30000; i++) { progressBar1.Value = i; } }
Запускаем приложение (рис. 7.12). Процесс выполняется в синхронном режиме — попробуйте перемещать форму в момент запуска.
Даже такое простое приложение требуется запускать в асинхронном режиме. Переделайте его самостоятельно, используя в качестве примера приложение ArbitraryMethod.
На диске, прилагаемом к книге, вы найдете приложение ProgressBar (Code\Glava7\ ProgressBar).