Видимое свойство PictureBox не работает ... помогите пожалуйста - PullRequest
6 голосов
/ 02 декабря 2011

Я использую окно приложения и C # .. У меня есть изображение, которое невидимо в начале приложения .. Когда нажимается какая-то кнопка, должно быть показано окно изображения ..

я используюэта кодировка, но графическое окно не отображается

private void save_click(object sender, EventArgs e)

{

      pictureBox1.Visible = true;
      pictureBox1.Show();

      //does the work here 
      //storing and retreiving values from datadase

     pictureBox1.Visible = false;
     pictureBox1.Hide();
}

PS .. в графическом окне я показываю gif .. так что пользователь будет знать, что в фоновом режиме происходит какая-то работадля завершения функции требуется много времени ...

Ответы [ 3 ]

5 голосов
/ 02 декабря 2011

Предполагая, что сохранение в базе данных занимает некоторое время, вы должны делать это асинхронно, используя BackgroundWorker, скрывая свой PictureBox после завершения операции.

Причина, по которой изображение в данный момент не отображается, заключается впока выполняется длительная операция сохранения, сообщения Windows не обрабатываются, поэтому ваша форма не будет реагировать на ввод пользователя и не будет перерисовываться.Когда операция сохранения заканчивается, и сообщения снова обрабатываются, окно рисунка уже снова скрыто.

3 голосов
/ 19 мая 2015

Чтобы избежать использования многопоточности, все, что вы можете сделать, это pictureBox1.Refresh(); после pictureBox1.Visible = true;, как показано ниже:

private void save_click(object sender, EventArgs e)
{
    pictureBox1.Visible = true;
    pictureBox1.Refresh();

    //does the work here 
    //storing and retreiving values from datadase

        pictureBox1.Visible = false;
}
1 голос
/ 02 декабря 2011

Ваше графическое окно не будет отображаться, потому что вы выполняете другие операции в потоке пользовательского интерфейса в течение времени, когда вы хотите, чтобы графическое окно отображалось. Пользовательский интерфейс не будет перекрашиваться (показывая графическое окно), пока поток пользовательского интерфейса не станет свободным - т.е. после вашего метода.

Чтобы преодолеть это, вам нужно сначала показать окно с изображением, затем запустить поток для выполнения ваших операций (это позволит WinForms успешно продолжить взаимодействие и рисовать пользовательский интерфейс), а затем завершить обратным вызовом пользовательского интерфейса. нить, чтобы скрыть графическое окно.

См. Этот Вопрос StackOverflow для получения справки по многопоточному процессу выполнения.

...