Problém se zamrznutím formuláře   zodpovězená otázka

C#

Dobrá den, dělám jednu aplikaci a mám takový problém. Mám třídu, kde vrací pole retězců, které se stahují ze SOAP služby. Vše funguje v pořádku. Ale pokud vytvořím formulář a zavolám tam kód pro přidání výsledku do ComboBoxu, tak formulář zamrzne. Pro představu -

public void LoadStrings()
{
  foreach(string s in engine.GetStrings())
  {
     comboBox1.Items.Add(s);
  }
}

Pokud tuto metodu zavolám

1) V konstruktoru

Aplikace se strašně dlouho spouští.

2) V eventu form.Shown

Formulář zamrzne

3) V eventu form.Activated

Formulář zamrzne

4) Použiji anonymní metodu

this.Invoke((MethodInvoker) delegate {
  LoadStrings();
});

Také zamrzne

5) Jiné vlákno

Aplikace vyhodí vyjímku, že se pokouším s GUI manipulovat z jiného vlákna, než bylo vytvořeno.

Nevíte jak to udělat, aby se aplikace nezpouštěla dlouho, ale ani nezamrzlo GUI, aby se třeba zobrazil Dialog, že se stahují stringy(Zobrazil se formulář než se stringy stáhnou)?

Děkuji za odpověď

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Všechno časově náročné spouštějte ve vlastním vlákně. S uživatelským rozhraním není vůbec potřeba z druhého vlákna komunikovat, maximálně kvůli aktualizaci průběhu operace a k tomu slouží WindowsFormsSynchronizationContext.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Díky! To je přesně to, co jsem potřeboval :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback