Strona 1 z 1

zmienna.Text = "cos tam" nie dziala

Napisane: czwartek, 14 sierpnia 2014, 15:25
przez arti
jak w tytule. Ustawilem .Text aby zmienialo sie po kazdym kroku ale aplikacja w jakis sposob pomija to albo wogole nie zdarzy bo jest zajeta czym innym. Mozna jakos to wymysic?
czesc mojego kodu wyglada tak:

Code: Zaznacz cały

        public void installDrivers()
        {
            loading_text.Text = "Installing Drivers...";                                       <-------- ta linijka albo zostaje pominieta albo wskakuje z bardzo duzym opoznieniem, czyli np dalej wisi na poprzednim ekranie. 
                                                                        //copy desktop power profiles:
            if ((bool)Desktop.IsChecked)
            {
                DirectoryCopy("X:\\PowerProfiles\\Desktop", "C:\\Configs", true);
            }
                                                                        //graphic cards:
            //geforce:
            if ((bool)geforce.IsChecked)
            { 
                DirectoryCopy("X:\\Drivers\\nVidia\\Graphics", "C:\\Chillblast\\Drivers\\nVidia\\Graphics", true);
                var geforce_install = Process.Start("C:\\Chillblast\\Drivers\\nVidia\\Graphics\\Setup.exe", "-n -s");
                geforce_install.WaitForExit();
            }
     }
reszta kodu odpala sie jak nalezy, wszystko kopiuje oraz instaluje. Niestety zmiany designu nie dzialaja prawie zadne. Slyszalem o multithreading ale nie mam pojecia jak to zastosowac.
Moze jakis przyklad na moim kodzie?

Re: zmienna.Text = "cos tam" nie dziala

Napisane: czwartek, 14 sierpnia 2014, 22:40
przez Morfidon
Prawdopodobnie zajmujesz wątek czymś bardzo czasochłonnym. Gdzie jest wywoływana ta funkcja, co jest wywoływane przed etc. ?

Masz do dyspozycji coś takiego jak Dispatcher (omówiony w kursie lekcja 49).

Re: zmienna.Text = "cos tam" nie dziala

Napisane: piątek, 15 sierpnia 2014, 10:15
przez arti
program dziala tak ze mapuje dysk z servera i gdy uzytkownik wybierze model laptopa/komputera program pobiera i instaluje odpowiednie komponenty.
Wszystko dziala idealnie oprocz zmian layoutu. Program jest napewno bardzo zajety pobieraniem plikow i instalowaniem. Czytalem na forach ze powinienem podzielic to na thready ale to juz chyba bardziej zaawansowana opcja. Poki co moj
dispatcher wyglada tak:

Code: Zaznacz cały

        public MainWindow()
        {

            InitializeComponent();
            mapDriveX();
            DispatcherTimer layout = new DispatcherTimer();
            layout.Interval = TimeSpan.FromSeconds(1);
            layout.Tick += layoutCheck;
            layout.Start();
  
        }

        private void layoutCheck(object sender, EventArgs e)
        {
 	        if (GetCurrentMethod() == "install_btn_Click")
            {
                installcover.Visibility = System.Windows.Visibility.Visible;
                loading_text.Visibility = System.Windows.Visibility.Visible;
                back_btn.Visibility = System.Windows.Visibility.Hidden;
                install_btn.Visibility = System.Windows.Visibility.Hidden;
                loading_text.Text = "Preparing Install...";
            }
            if (GetCurrentMethod() == "CopyTestTools")
            {
                loading_text.Text = "Copying test tools from server...";

            }
            if (GetCurrentMethod() == "installDrivers")
            {
                loading_text.Text = "Installing Drivers...";
            }
            if (GetCurrentMethod() == "InstallSoftware")
            {
                loading_text.Text = "Installing Software...";
            }
        }
        [MethodImpl(MethodImplOptions.NoInlining)]
        public string GetCurrentMethod()
        {
            StackTrace st = new StackTrace();
            StackFrame sf = st.GetFrame(1);

            return sf.GetMethod().Name;
        }
*
* reszta kodu
*
*

}

Re: zmienna.Text = "cos tam" nie dziala

Napisane: piątek, 15 sierpnia 2014, 12:25
przez Morfidon
Spróbuj skorzystać z BackgroundWorker

Re: zmienna.Text = "cos tam" nie dziala

Napisane: piątek, 15 sierpnia 2014, 13:11
przez arti
Jakis przyklad jak to zastowowac w moim kodzie? Fajnie by bylo gdyby Pan przygotowal lekcje jak kozystac z MSDN.
To juz pewnie w kursie dla bardziej zaawansowanych :P

Re: zmienna.Text = "cos tam" nie dziala

Napisane: piątek, 15 sierpnia 2014, 13:31
przez Morfidon
Masz bardzo dokładny przykład na stronie co Ci podałem. Zjedź niżej... Wpisz BackgroundWorker tutorial i znajdziesz też ogrom innych informacji na ten temat. Jak już programista wie, że istnieje coś to powinno mu to starczyć. W necie masz ogromny zasób przykładów w większości wypadków.

Re: zmienna.Text = "cos tam" nie dziala

Napisane: piątek, 15 sierpnia 2014, 14:10
przez arti
ok, dzieki.
poprobuje i dam znac jak poszlo :)