Co zrobić, aby program nie zawieszał się?

0

Język programowania to C#. Używam biblioteki .NET Framework.

Mam metodę, którą uruchamiam w konstruktorze głównego okna programu, zaraz po uruchomieniu:

private void SetProgramTitle()
        {
            while (string.IsNullOrEmpty(output.Nickname)) // wait until nick has been loaded by another thread
            {
                Thread.Sleep(50);
            }

            this.Text = "(" + output.Nickname + " | " + output.Id + ") Program v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
        }

Problem polega na tym, że zawiesza to program aż do odczytania zmiennej Nickname, która jest pobierana za pośrednictwem Internetu przez inny wątek (trwa to jakąś sekundę, a to dużo dla mnie). Chcę, żeby pojawiło się okno i użytkownik mógł grzebać, a tytuł okna zmieni się po tej sekundzie bez żadnego zacinania się.

Tworzenie osobnego wątku jest chyba bez sensu?

Pozdrawiam.

0

Jak tamten wątek pobierający skończy pobieranie po czym niech natychmiast zmieni tytuł i już.

0

pobieraj funkcją DownloadStringAsync, tam możesz podać callback do wywołania po skończeniu pobierania - i w tym callbacku aktualizuj nicka.
nie potrzebujesz w ogóle wątków.

0
Azarien napisał(a):

pobieraj funkcją DownloadStringAsync, tam możesz podać callback do wywołania po skończeniu pobierania - i w tym callbacku aktualizuj nicka.
nie potrzebujesz w ogóle wątków.

Dzięki!

0

to ja jeszcze tradycyjnie pokażę, jak to będzie wyglądało w visualu 2012...

private async void SetProgramTitle()
        {
            WebClient wc = new WebClient();
            string nickname = await wc.DownloadStringTaskAsync("http://...");
            this.Text = '(' + nickname + ...
        }

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