2011-12-02 10 views
6

Używam aplikacji okna i C# .. mam obraz, który jest niewidoczny na początku aplikacji .. po kliknięciu przycisku, pole graficzne musi być pokazano ..Widoczna właściwość PictureBox nie działa ... proszę o pomoc

używam tego kodowania ale pole obraz nie jest widoczny

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 .. w oknie obrazu I pokazuję gif .. więc użytkownik będzie wiedział, że niektóre prace się dzieje w tle .. Ukończenie funkcji potrwa długo ...

Odpowiedz

5

Zakładając, że zapis do bazy danych zajmuje trochę czasu, powinieneś zrobić to asynchronicznie, używając BackgroundWorker, ukrywając swój PictureBox po zakończeniu operacji.

Powodem, dla którego obecnie nie jest wyświetlany obraz, jest fakt, że podczas długotrwałej operacji składowania wiadomości systemu Windows nie są przetwarzane, a zatem formularz nie odpowiada za wprowadzanie danych przez użytkownika i nie wykonuje ponownego malowania. Po zakończeniu operacji zapisywania i ponownym przetworzeniu wiadomości pole obrazu jest już ukryte.

1

Skrzynka obrazkowa nie będzie wyświetlana, ponieważ w czasie, gdy ma być wyświetlana ramka graficzna, wykonywane są inne operacje na wątku interfejsu użytkownika. Interfejs użytkownika nie zostanie ponownie zamalowany (pokazując ramkę graficzną), dopóki wątek interfejsu użytkownika nie stanie się wolny - tj. Po twojej metodzie.

Aby to rozwiązać, musisz najpierw wyświetlić ramkę graficzną, a następnie odpalić wątek, aby uruchomić operacje (pozwoli to WinForms z przyjemnością kontynuować interakcję i malowanie interfejsu użytkownika), a następnie zakończyć oddzwonienie do Wątek interfejsu użytkownika do ukrycia ramki graficznej.

Skorzystaj z tego StackOverflow Question, aby uzyskać pomoc dotyczącą tego procesu wielowątkowego wykonywania.

2

Aby unikać wielowątkowości, wszystko można zrobić, to pictureBox1.Refresh(); po pictureBox1.Visible = true; jak poniżej:

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; 
} 
Powiązane problemy