Mam formularz pokazujący komunikaty o postępach, ponieważ trwa dość długo. Jest to połączenie z usługą internetową, więc nie mogę w znaczący sposób pokazać procentowej pełnej liczby na pasku postępu. (Nie podoba mi się właściwość Marquee paska postępu)
Chciałbym pokazać animowany GIF, aby nadać procesowi wrażenie jakiejś aktywności (np. Pliki przelatujące z jednego komputera na drugi, jak proces kopiowania w systemie Windows).
Jak Ty to robisz?
c#
winforms
animated-gif
Stuart Helwig
źródło
źródło
Odpowiedzi:
To nie jest zbyt trudne.
Kwestie, które należy wziąć pod uwagę:
Animowane gify:
Jeśli szukasz animowanych gifów, możesz je wygenerować:
AjaxLoad - Ajax ładuje generator gifów
Inny sposób na zrobienie tego:
Innym sposobem, który znalazłem, który działa całkiem dobrze, jest kontrolka okna dialogowego asynchronicznego, którą znalazłem w projekcie kodu
źródło
Application.DoEvents();
. Możliwe podejście: Twoja logika biznesowa wyzwala zdarzenie, gdy coś jest częściowo zrobione, następnie dowolne właściwości (na przykład pasek postępu lub wartość procentowa) mogą zostać zaktualizowane, a animacja może zostać zaktualizowana za pomocą Application.DoEvents ()Miałem ten sam problem. Cały formularz (łącznie z gifem) przestaje się przerysowywać z powodu długiego działania w tle. Oto jak to rozwiązałem.
Po prostu utworzyłem kolejny wątek, który będzie odpowiedzialny za tę operację. Dzięki takiemu początkowemu formularzowi przerysowuje się bez problemów (w tym mój gif działa). ShowProgressGifDelegate i HideProgressGifDelegate są delegatami w postaci, która ustawia właściwość visible obiektu pictureBox z gif na wartość true / false.
źródło
Zwróć uwagę, że w systemie Windows tradycyjnie nie używasz animowanych GIF-ów, ale małe animacje AVI: istnieje natywna kontrolka systemu Windows tylko do ich wyświetlania. Istnieją nawet narzędzia do konwersji animowanych Gifów do formatu AVI (i odwrotnie).
źródło
System.Windows.Forms.PictureBox
kontrolkę, użyję tylko animowanych plików GIF.Jeśli umieścisz go w kontrolce PictureBox, powinno po prostu działać
źródło
Nie dzieje się tak, gdy zaczynasz długą operację z tyłu, ponieważ wszystko ZATRZYMUJE się, odkąd jesteś w tym samym wątku.
źródło
źródło
Miałem ten sam problem i natknąłem się na różne rozwiązania, wdrażając, które napotykałem na kilka różnych problemów. Na koniec poniżej przedstawiam kilka fragmentów z różnych postów, które działały zgodnie z oczekiwaniami.
Oto metoda Execution, która przenosi również wywołanie kontrolki PictureBox:
Pamiętaj, że PictureBox jest niewidoczny w oknie Właściwości lub wykonaj poniższe czynności:
źródło