Koledzy problem jest taki:
program wykonuje jakieś obliczenia , w kilku miejscach wyświetla się dodatkowe okno (z komunikatami), potem kolejne zadania, kolejne okna z komunikatami.
Aby okno nie zawieszało się na czas wykonywania zadań dodałem Dispatcher.Invoke do aktualizacji UI w nowym wątku.
Chciałbym aby program wykonywał swoją pracę dopiero jak wątek thread1 sie zakończy.
Niestety to okno z komunikatami pojawia się dopiero jak wykona się cały program, a nie tak jak bym tego chciał (wyswietlenie okna, dopiero działania) czyli jak to widać w kodzie po kolei.
public partial class MainWindow : Window
{
public delegate void Action();
public MainWindow()
{
InitializeComponent();
main_window.Show();
string[] args = { "self", "c:/tmp/plik.txt" };
Thread thread1 = new Thread(NotificationFileSent);
thread1.Start();
//inne czynności//
Thread.Sleep(3000);
//inne czynności//
Thread.Sleep(3000);
//dopiero po wykonaniu tych operacji wyswietla się okno z thread1 które wywołałem wyżej
}
void NotificationFileSent()
{
Dispatcher.Invoke(new Action(() =>
{
notification_window notification_window = new notification_window();
notification_window.Show();
notification_window.lblnotification.Content = "FileSent";
Thread.Sleep(TimeSpan.FromSeconds(5));
notification_window.Close();
}));
}
Dodam jeszcze że próbowałem dać po thread1.Start(); thread1.Join(); ale program wcale nie wyswietla mojego drugiego okna. thread1.Join(1000) wyswietla to okno ale również po wykonaniu operacji niżej.
Warunek konieczny - musi to działać na net framework 3.0
zupełnie nie potrafie sobie z tym poradzic ;/