Odpočítávání pomocí Labelu ve WPF – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odpočítávání pomocí Labelu ve WPF – .NET – Fórum – Programujte.comOdpočítávání pomocí Labelu ve WPF – .NET – Fórum – Programujte.com

 

hejnallukas0
Návštěvník
26. 7. 2011   #1
-
0
-

Zdar, já bych si chtěl udělat program , který mi bude ukazovat v Labelu aktuální čas.

Mám tlačítko se kterým se spustí Timer a ten by měl měnit čas v Labelu. 


private void zobrazCas_Click(object sender, RoutedEventArgs e)
        {
            Timer casovac = new Timer();
            casovac.Interval = 1000;
            casovac.Enabled = true;
            casovac.Elapsed += new ElapsedEventHandler(casovac_Elapsed);
            
        }

        void casovac_Elapsed(object sender, ElapsedEventArgs e)
        {
            DateTime dnesniDatum = new DateTime();
            dnesniDatum = DateTime.Now;
            string zobrazovnyCas = dnesniDatum.ToString("T");

            cas.Content = zobrazovnyCas;

Ale problém nastane při debuggingu. Nahlásí mi to následující chybu :

The calling thread cannot access this object because a different thread owns it.

Jedná se o řádek -->  cas.Content = zobrazovnyCas;

Děkuji za pomoc

Nahlásit jako SPAM
IP: 80.188.69.–
26. 7. 2011   #2
-
0
-
Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
hejnallukas0
Návštěvník
27. 7. 2011   #3
-
0
-

#2 djanosik
Víš já ve vláknech nejsem nijak zběhlý, nešlo by o udělat jinak ??

Nahlásit jako SPAM
IP: 80.188.69.–
hejnallukas0
Návštěvník
27. 7. 2011   #4
-
0
-

Možná jsem tomu trochu přišel na kloub, ale pořád mi to nemění čas, ale už se v Labelu objeví čas.

	private void zobrazCas_Click(object sender, RoutedEventArgs e)
        {
            DateTime dnesniDatum = new DateTime();
            dnesniDatum = DateTime.Now;

            string zobrazovanyCas = dnesniDatum.ToString("T");
           
            using(new Timer(casovac_Elapsed, zobrazovanyCas, 1000, 1000))
            {
                cas.Content = zobrazovanyCas;    
            }
            
        }

        void casovac_Elapsed(object data)
        {
            DateTime dnesniDatum = new DateTime();
            dnesniDatum = DateTime.Now;

            string zobrazovanyCas = dnesniDatum.ToString("T");
            cas.Content = zobrazovanyCas;
        }

Čerpal jsem z toho článku.

Kde je chyba ??

Nahlásit jako SPAM
IP: 80.188.69.–
27. 7. 2011   #5
-
0
-

#3 hejnallukas
Zkus si ten článek přečíst celý. Proto jsem tě na něj odkázal.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
Kyry+2
Newbie
27. 7. 2011   #6
-
+1
-
Zajímavé

Něják se mi nelíbí ten váš přístup 'přečti tohle a jdi do hajzlu'  nejde ? ->'četl jsi to špatně' -  Nehci na tohle téma filosofovat, protože je trochu sporné, když všechny chyby opravíš, tak pak se nic nenauči... Každopádně řešení:.

Nelze přistupovat ke controlu (tlačítko, text apod) z jiného vlákna, než kde bylo vytvořeno.
Pokud to potřebuješ, musíš funkci, která udělá změnu zavolat přes stejné vlákno, kde byl control vytvořen pomocí takzvaného invoku. 

  private delegate void ChangeTextClosure(Control control, string text);
        private void ChangeText(Control control, string text)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new ChangeTextClosure(ChangeText), control, text);
                return;
            }
            control.Text = text;
        }

Nahlásit jako SPAM
IP: 77.87.240.–
Vsadil jsem se, že budu mít na fóru nejlepší reputaci, pokud jsem ti pomohl(opravdu),
klikni na bezvýznamné plusko :-)
[b]Whether you think you can, or can't you are right ![/b]
27. 7. 2011   #7
-
0
-

#6 Kyry
Obávám se, že můj příspěvek s odkazem má vyšší informační hodnotu, protože s pomocí něj lze najít řešení. Tvůj příspěvek obsahuje informace, které lze najít i v článku a k tomu ještě kód, který v dané situaci nebude fungovat.

Tu zmínku o posílání do hajzlu raději ignoruju.

Nahlásit jako SPAM
IP: 91.217.52.–
Dušan Janošík | web: djanosik.cz, @djanosik
Kyry+2
Newbie
27. 7. 2011   #8
-
0
-

#7 djanosik
Ok beru to   

Nahlásit jako SPAM
IP: 77.87.240.–
Vsadil jsem se, že budu mít na fóru nejlepší reputaci, pokud jsem ti pomohl(opravdu),
klikni na bezvýznamné plusko :-)
[b]Whether you think you can, or can't you are right ![/b]
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Odpočítávání — založil Bunny-sh

Odpočítávání — založil Tomik

Odpočítávání do data — založil Miky

Odpočítávání + Gauge — založil Navara

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý