Oczkiwanie na koniec instancji klasy WPF

0

Moim problemem jest oczekiwanie na zakończenie obiektu klasy w WPF-e. Moim zamysłem było stworzenie klasy , która w osobnym oknie wyświetli progressbar i w wątku wypakuje zip-a. W tym czasie okno rodzic będzie wyłączony. Po skończeniu pracy progressbar się zamknie a okno rodzic podejmie na nowo swoją pracę.

Tworzenie drugiego okna i wykonanie metod

var mProgressBar = new ProgressBar(zipPath,TEMPDIRECTORY_Cache,ID,this);
mProgressBar.Show();
 

Natomiast kod konstuktora mProgressBar wygląda tak :

 
 public ProgressBar(string pathToZipFile, string destinationFolder, int id, MainWindow mainWindow)
        {
            _mainWindow = mainWindow;
            PathToZipFile = pathToZipFile;
            DestinationFolder = destinationFolder + @"//" + id.ToString();

            worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.ProgressChanged += worker_ProgressChanged;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.WorkerSupportsCancellation = true;

            mainWindow.Visibility = Visibility.Hidden; //tak sobie rozwiązałem zamykanie okna rodzica, oczywiście w metodzie RunWorkerCompleted przywracam okienko
            
            InitializeComponent();
}

Jednak nurtuje mnie pytanie w jaki sposób w oknie rodzicu rozpoznawać, i czekać na zakończenie pracy progressBara. Chciał bym wiedzieć kiedy mam dane już wypakowane i mogę się nimi zająć.

0

Na pewno nie patrząc na postęp progress bara. Po rozpakowaniu ZIP powinieneś powinieneś wywołać akcję, która ukryje progressbar i ponownie otworzy okno rodzica.

0

Wykorzystaj zdarzenia. Dodaj sobie zdarzenie w klasie ProgressBar, które będzie wykonane gdy pliki zostaną rozpakowane. To zdarzenie będzie subskrybowane przez formę - rodzica.

0

Ok , dzięki.

Czyli w klasie bazowej mam utworzyć metodę obsługującą event i referencje do tej metody przekazać dla klasy potomnej a w niej do tworzonego delegata wpisać referencję przekazaną ?

Jeśli nie to co mam wpisać w google ? :)

0

Nie lepiej po prostu użyć do tego celu BackgroundWorkera (i jego trzech zdarzeń: start, raport pracy i zadanie zakończone)?

0

Używam Background Workera , jednak w klasie bazowej chcę wiedzieć kiedy BW skończył pracę. Sam bowiem BW odpalany jest w innej instancji innej klasy. Poczytałem nieco na sieci i chyba źle podszedłem do tematu. Po prostu zaimplementuje w mojej kolekcji ObservableCollecion i gdy kolekcja będzie różna od null to wtedy podejmę dalszą pracę z danymi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1