• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z ładaowaniem preloadera.Wielowątkowosć. C# wpf

0 głosów
650 wizyt
pytanie zadane 18 maja 2019 w C# przez poczatkujacy_pr Nowicjusz (180 p.)
Witam,
jestem początkującym programistą i nie mam doświadczenia w programowaniu wielowątkowym. Pracuję nad aplikacja wpf, w której po wyborze pliku (shapefile) w oknie dialogowym , wykonywana jest metoda OpenFile(file) i następuje dość długi proces przetwarzania i ładowania pliku. Chciałbum, aby w tym czasie widoczny był animowany preloader, który umiśeciłem w oknie popup, stworzonym w głównym oknie aplikacji. Napisałem kod:

public void OpenShapeFile(string path)
{
Dispatcher.Invoke(new Action(() => moj_popup.IsOpen = true; }));
//metody związane z otwieraniem pliku
moj_popup.IsOpen =false;
}
Niestety popup pojawia się dopiero po załadawaniu pliku i nie wiem, dlaczego tak sie dzieje. Bardzo proszę o szybką pomoc, bo aplikację robię na zaliczenie i termin goni:((((
komentarz 19 maja 2019 przez jankustosz1 Nałogowiec (37,030 p.)
W jakim wątku wywołujesz tę metodę?

Jeżeli nie w głównym to jest to spoko. Wrzuć tylko moj_popup.IsOpen =false; do Dispatcher.Invoke, żeby się prawidłowo zamknęło
komentarz 19 maja 2019 przez poczatkujacy_pr Nowicjusz (180 p.)
Wywoływałem w głównym, więc stąd pewnie problem, ale jak próbuję wrzucić do nowego:

 public void StartThread(string file)
        {
            new Thread(OpenShapeFile).Start();
        }

to pokazuje mi że nie można bo to grupa metod????
komentarz 20 maja 2019 przez jankustosz1 Nałogowiec (37,030 p.)

No bo ta metoda przyjmuje argument.

Spróbuj tak: 

new Thread( ()=>OpenShapeFile("sciezka do pliku") ).Start();

 

komentarz 21 maja 2019 przez poczatkujacy_pr Nowicjusz (180 p.)
Dzięki wielkie. Udało mi sie zrobic

1 odpowiedź

0 głosów
odpowiedź 19 maja 2019 przez poczatkujacy_pr Nowicjusz (180 p.)
edycja 19 maja 2019 przez poczatkujacy_pr
Próbowałem w ten sposób, ale popup pojawia się dopiero po załadowaniu pliku:

Mój kod tak wygląda:

 public partial class MainWindow : Window
    {
        BackgroundWorker worker = new BackgroundWorker();

     
        public MainWindow()
        {
            InitializeComponent();

}

 private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
          mojpopup.Dispatcher.Invoke(() => { mojpopup.IsOpen = true; });
            
        }
        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
        //mojpopup.Dispatcher.Invoke(() => { mojpopup.IsOpen = false; });
        }

public void OpenShapeFile(string path)
        {    
         
            worker.WorkerReportsProgress = true;
            worker.DoWork += worker_DoWork;

             worker.RunWorkerAsync();
            // metody otwierające plik

         worker.RunWorkerCompleted += worker_RunWorkerCompleted;
           

}

}

Podobne pytania

0 głosów
1 odpowiedź 555 wizyt
pytanie zadane 24 marca 2018 w C# przez Squu Użytkownik (520 p.)
+1 głos
1 odpowiedź 6,625 wizyt
pytanie zadane 18 sierpnia 2016 w C# przez jankustosz1 Nałogowiec (37,030 p.)
0 głosów
1 odpowiedź 248 wizyt
pytanie zadane 1 sierpnia 2016 w C# przez jankustosz1 Nałogowiec (37,030 p.)

93,756 zapytań

142,715 odpowiedzi

323,363 komentarzy

63,351 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...