Čekání na konec aplikace kvůli COM portu [C#] – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Čekání na konec aplikace kvůli COM portu [C#] – .NET – Fórum – Programujte.comČekání na konec aplikace kvůli COM portu [C#] – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
DragonBehemont0
Super člen
30. 4. 2012   #1
-
0
-

Zdravím, mám takový problém, že mi aplikace při ukončení čeká na uzavření COM portu. COM port se otevírá během spuštění aplikace a na konci (během metody Dispose) volám funkci, která ukončuje a uzavírá COM port.

            if (teplomerPort != null)
            {
                teplomerPort.DataReceived -= teplomerPort_DataReceived;
                myDelegateTemperatureReceived = null;

                if (teplomerPort.IsOpen)
                {
                    while (teplomerPort.BytesToRead > 0)
                        teplomerPort.DiscardInBuffer();

                    while (teplomerPort.BytesToWrite > 0)
                        teplomerPort.DiscardOutBuffer();

                    teplomerPort.Close();
                }

                if (teplomerPort != null)
                    teplomerPort.Dispose();

                temperatureValue = 0;
                teplomerPort = null;

Aplikace se někdy zasekne v kroku teplomerPort.Close() a jediný způsob jak ji ukončit je pomocí stopnutí debug ve Visual Studiu. Nemáte s tím někdo zkušenosti? 

Nahlásit jako SPAM
IP: 80.254.147.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Reklama
Reklama
DragonBehemont0
Super člen
2. 5. 2012   #2
-
0
-

#1 DragonBehemont
Jen pro doplnění:

1.) Stejný problém se projevuje i na ostatních COM portech

2.) Když se ve VS podívám, kde zrovna program čeká, tak mi to hlásí, že čeká v kroku, kde se uzavírá port.

3.) Když se podívám na stav portu, tak mi VS ve watch tabulce hlásí: "Cannot evaluate expression because the current thread is in a sleep, wait, or join"

4.) Pro příjem dat využívám event DataReceived

Nahlásit jako SPAM
IP: 89.24.196.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
DragonBehemont0
Super člen
2. 5. 2012   #3
-
0
-

#1 DragonBehemont
Díky tomu popisu, že dané vlákno je uspáno nebo čeká na ukončení jiného vlákna mne napadlo, že to může být tím příjmem dat pomocí eventu, tak jsem do eventu přidal následující podmínky.

            try
            {
                if ((this != null) && (myDelegateInputsReceived != null))
                {
                    if (this.Controls.Count > 0)
                    {
                        this.Invoke(myDelegateInputsReceived);
                    }
                    else
                    {
                        beckhoffPort.DiscardInBuffer();
                    }
                }
                else
                {
                    beckhoffPort.DiscardInBuffer();
                }
            }
            catch
            {

            }

Toto jsem udělal u všech eventů pro COM porty. Od té doby se tato chyba zatím neprojevila.

Nahlásit jako SPAM
IP: 89.24.196.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
DragonBehemont0
Super člen
2. 5. 2012   #4
-
0
-

Hmm, tak problém se opět objevil, ale tentokrát úplně někde jinde.

this.Invoke(myDelegateInputsReceived);

V tomto kroku to opět čeká a i když je tam podmínka, že myDelegateInputsReceived nesmí být null, tak mi to hlásí, že jeho hodnota je null.

Nahlásit jako SPAM
IP: 89.24.196.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
Řešení
DragonBehemont0
Super člen
Nahlásit jako SPAM
IP: 80.254.147.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
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, 81 hostů

 

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