Nezastavenie premennej ktora bezi vo vlakne – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nezastavenie premennej ktora bezi vo vlakne – .NET – Fórum – Programujte.comNezastavenie premennej ktora bezi vo vlakne – .NET – Fórum – Programujte.com

 

Tayson0
Stálý člen
28. 10. 2013   #1
-
0
-

Zdravim

Mam takyto problem. Mam premennu s nazvom receivedString ktora je definovana lokalne v triede. Tato premenna je spustena vo vlakne kde vycitava stale dookola data cez UDP protkol.

Vyzera to nasledovne:

public static string receivedString="";    //lokalne zadefinovanie premennej

public Thread t;

public communication()     //konstruktor
        {
            t = new Thread(new ThreadStart(listen));     //spustenie funkcie vo vlakne
        }

public void listen()

{

...vycitavanie dat cez UDP

 receivedString = Encoding.ASCII.GetString(received);     //stale uklada data do premennej vo vlakne

}

Dalej v druhej triede porovnavam tuto premennu s nejakym textom cize hladam nejaky textovy retazec preto ju mam aj staticku. To hladanie mam taktiez spustene vo vlakne a stale dookola porovnava retazec ktory chcem s datami ktore prichadzaju.

Vyzera to nasledovne:

while (true)
            {
                if (communication.receivedString.Contains("blabla"))
                {Set();

                  ...

            }

            }

Samozrejme si to vypisujem do textboxu tie data ktore dookola prichadzaju cez UDP. Vypisovanie do textboxu prebieha este v predchadzajucej triede vo funkcii listen.

Samotny problem je v tom ze ja ak pouzijem EventWaitHandle a pride program na miesto kde je napisane WaitOne(); tak cakam kym sa nesplni podmienka ze sa retazec v premennej bude rovnat mojmu retazcu ktory hladam a potom sa vykona Set(); a program bezi dalej od miesta kde bolo WaitOne(); Mam teraz na mysli tu druhu funkciu ktora bezi vo vlakne a stale dookola porovnava. Ale mne pokial nenastavi to Set(); tak hlada vo vlakne stale dookola retazec ale ta premenna receivedString zamrzne aj ked je spustena vo vlakne. Preco je to tak ked ja tym EventWaitHandle zastavim len vykonavanie hlavneho vlakna kde mi nebude nic vypisovat do textboxu ale ta premenna vo vlakne by sa mala stale menit.

Nahlásit jako SPAM
IP: 195.146.129.–
VladislavK0
Super člen
28. 10. 2013   #2
-
0
-

1) Nehlasi ti to neco jako ze staticky deklarovanou promenou nelze za behu programu modifikovat??

2) dej sem kod i s tray catch, tusim ze ho mas nekde zde

public void listen()

{

...vycitavanie dat cez UDP

 receivedString = Encoding.ASCII.GetString(received);     //stale uklada data do premennej vo vlakne

}

ta promena zamrzne protoze do ni nelze zapisovat

Nahlásit jako SPAM
IP: 37.48.38.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
ingiraxo+15
Grafoman
28. 10. 2013   #3
-
0
-

Popravdě jsem tak blbej způsob čtení dat z TCP/UDP ještě neviděl

asynchronní naslouchání ti zřejmě nic neřiká... spusť async naslouchání i čtení a tam si s datama dělej co chceš, třeba zpracuj data v separátním vlákně, to už je jedno, ale aby se ti data ukládaly do proměnný pro celej UDP je blbost.. nějak si nedovedu představit, jak by to fungovalo třeba při 10 klientech

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
28. 10. 2013   #4
-
0
-

   

Připojen obrázek.


Takze tato metoda "listen" je spustena vo vlakne a premenna "receivedString" prijima data vypisuje do textboxu s nazvom "tb" tuto vsetko funguje.

Problem je ale v tejto triede tuto:

Připojen obrázek.


Na druhom obrazku je ina trieda ako ta kde je funkcia listen. A tu porovnavam ci sa nachadza retazec v premennej "receivedString". Preto som si dal premennu staticku aby som mohol v druhej triede porovnavat premennu. Aj tato metoda bezi vo vlakne. Lenze ako ja zavolam WaitOne(); tak hlavne vlakno caka kym nepride Set(); a kym hlavne vlakno caka tak vsetko zamrzne aj premenne "receivedString" ktora neviem preco zastavi tiez ked bezi v inom vlakne.

Nahlásit jako SPAM
IP: 195.146.129.–
Tayson0
Stálý člen
28. 10. 2013   #5
-
0
-

#3 ingiraxo
Lenze ja asynchronnu komunikaciu nemozem pouzit pretoze zariadenie s ktory komunikujem nerobi nic ine len posiela data stale dookola ... nefunguje to tak ze ja mu nieco poslem a ked to on prijme tak mi odosle nieco naspat ... on proste stale dookola posiela data

Nahlásit jako SPAM
IP: 195.146.129.–
ingiraxo+15
Grafoman
28. 10. 2013   #6
-
0
-

#5 Tayson
to ale neznamená, že nemůžeš použít async čtení... nemusíš tam potom mít žádný tvoje vlákno

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
28. 10. 2013   #7
-
0
-

#6 ingiraxo
Nevies mi poradit ako by som spravil v mojom pripade to async citanie ?

Nahlásit jako SPAM
IP: 85.237.239.–
Tayson0
Stálý člen
28. 10. 2013   #8
-
0
-

#6 ingiraxo
Ja proste potrebujem odoslat nejaky prikaz a to zariadenie mi bud odpovie alebo neodpovie podla toho ci sa ta udalost stala alebo nie .

Nahlásit jako SPAM
IP: 195.146.129.–
ingiraxo+15
Grafoman
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
28. 10. 2013   #10
-
0
-

#9 ingiraxo
A teraz aby som tomu aj ja chapal .... ja proste stale prijimam data cez UDP a vypisujem si ich do textboxu stale dookola ... to mam v tej funkcii listen.... ale teraz potrebujem to ze cez UDP odoslem nejaky prikaz a ono mi po nejakom case neviem kedy pride odpoved... takze mne staci len async client si naprogramovat nie ?

Nahlásit jako SPAM
IP: 195.146.129.–
Tayson0
Stálý člen
28. 10. 2013   #11
-
0
-

#2 VladislavK
A premenna ktora je v inej triede napr. ako moja "receivedString" a chcem aby som ju mohol sledovat aj v druhej triede ak sa samozrejme jej obsah dynamicky meni mi nepojde ak ju budem mat staticku ?

Nahlásit jako SPAM
IP: 195.146.149.–
VladislavK0
Super člen
28. 10. 2013   #12
-
0
-

#11 Tayson
Promin zblbnul jsem to, to co jsem napsal patri k dekoraci CONST, kazdopadne ja se za vsech moznych situaci doporucuji nepouzivat STATIC promene v ramci instancovane tridy.

Ve specifickych pripadech pouzivam static class 

Nahlásit jako SPAM
IP: 37.48.38.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Tayson0
Stálý člen
28. 10. 2013   #13
-
0
-

#6 ingiraxo
Nakoniec som zistil ze mne to async asi nepomoze. Pretoze server posiela stale dookola data bez ohladu na to ci klient nieco poslal alebo nie ... stale posiela co prave robi .... a ja ked mu nieco poslem tak medzi tym pridu uplne ine data ani ktore necakam .... a este by som chcel reagovat k tej premennej co si pisal ze nevies si predstavit ako by to fungovalo pri 10 klientoch ... ono ked si vsimnes co som pridal prvy obrazok tu metodu listen tak tam sa do premennej receivedString uklada stale prijaty retazec ale v kazdom cykle sa premaze novym prijatym retazcom takze je to OK ... potrebujem ale tu premennu kontrolovat v inej triede a v metode chceck_alarm ktora bezi vo vlakne a je na druhom obrazku co som pridal.... ako to spravit ? ... lebo mam pocit ze ta premenna je tam teraz staticka a je stale prazdna

Nahlásit jako SPAM
IP: 158.193.83.–
Tayson0
Stálý člen
28. 10. 2013   #14
-
0
-

#12 VladislavK
A ako to teda spravit aby som nepouzil ako staticku premennu ? ale tak aby som v inej triede ju dokazal kontrolovat dokonca aj ked sa dynamicky meni ... chcem len dodat ze metoda v ktorej bezi je spustena vo vlakne 

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
28. 10. 2013   #15
-
0
-

#13 Tayson
já nevim co to je za server, ale pokud jen odesílá a ty chceš jenom přijímat, tak ti stačí jen klient

místo proměnný můžeš použít událost třeba, potom si ten Alert můžeš zavolat kde chceš, jedno řešení třeba může být takto...

Server

    public class Server
    {
        // pro cyklicky odesilani dat kazdych 1000ms
        private Timer timer = new Timer();
        private Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        private int counter = 0; // pouze hodnota, ktera se odesle

        public Server()
        {
            server.EnableBroadcast = true;
            server.Connect(new IPEndPoint(IPAddress.Broadcast, 2000));

            timer.Elapsed += ProcSend;
            timer.Interval = 1000;
            timer.Start();
        }

        private void ProcSend(object sender, ElapsedEventArgs e)
        {
            byte[] data = BitConverter.GetBytes(counter);
            server.Send(data);
            counter++;
        }
    }


Klient

    public class Client
    {
        // udalost pro cteni dat
        public event Action<byte[], int> Received = delegate { };

        private Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        // specialni vlakno (spise async delegat)
        private BackgroundWorker worker = new BackgroundWorker();

        public Client()
        {
            client.EnableBroadcast = true;
            client.Bind(new IPEndPoint(IPAddress.Any, 2000));

            worker.DoWork += ProcReceive;
        }

        public void Start()
        {
            worker.RunWorkerAsync();
        }

        private void ProcReceive(object sender, DoWorkEventArgs e)
        {
            byte[] buffer = new byte[1024];

            while (true)
            {
                int read = client.Receive(buffer);
                Received(buffer, read);
            }
        }
    }


Použití (kdekoli, třeba ve Formu): 

Server s = new Server();
Client c = new Client();

c.Received += (buffer, read) =>
{
    int value = BitConverter.ToInt32(buffer, 0);
    Console.WriteLine(value);
};
c.Start();
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
28. 10. 2013   #16
-
0
-

#15 ingiraxo
No ty si mi tu hodil o nieco zlozitejsi kus kodu ..... pozriem sa na neho ...  a neviem preco ked pouzije v hlavnom vlakne v nejakej triede EventWaintHandle a pouzijem WaitOne(); tak mi zastavi aj spustene vlakno .... nerozumiem tomu. 

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
28. 10. 2013   #17
-
0
-

#16 Tayson
To co jsem poslal já je právě normální použití UDP :) Hlavně jak ty používás UdpClient, tak to je vyšší vrstva, ja mam tu nižší, ze který teprve vychází UdpClient (proto se ti to možná zdá složitější)

Tak EventWaintHandle asi špatně používáš 

    public class ThreadCycle
    {
        private EventWaitHandle w = new EventWaitHandle(false, EventResetMode.AutoReset);
        private volatile int num = 0; // pouze pro uchovani vysledku vypoctu
        private Thread th;

        public ThreadCycle(int baseNum)
        {
            num = baseNum;
        }

        public void Start() // spusti vlakno
        {
            th = new Thread(Process);
            th.IsBackground = true;
            th.Start();
        }

        public void Next() // uvolni vlakno pro dalsi ypocet
        {
            w.Set();
        }

        public int Num { get { return num; } } // aktualni vysledek

        private void Process()
        {
            while (true)
            {
                num *= 2; // nejaky vypocet

                w.WaitOne();
            }
        }
    }
ThreadCycle cyc = new ThreadCycle(2);
cyc.Start(); // spusti vlakno

// pokud se klikne mysi na Form, tak se "uvolni" vlakno a
// vypocte se hodnota + nastaví jako titulek Formu
MouseClick += (o, e) =>
{
    cyc.Next();
    Text = cyc.Num.ToString();
};
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #18
-
0
-

#17 ingiraxo
No presne tak isto to mam spravene .... v metode v hlavnom vlakne mam WaitOne() a potom Set() mam nastavene v tej druhej metode ktora bezi vo vlakne (ten druhy obrazok co som pridal) ale ked mi program pride do bodu kde je WaitOne() tak mi nejde ani metoda listen ktora je taktiez spustena vo vlakne a ta metoda by mala ist. Samozrejme ze nepojde textbox pretoze je v hlavnom vlakne ale ta premenna by sa mala nadalej menit.

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #19
-
0
-

#18 Tayson
"No presne tak isto to mam spravene" -> vážně? neřekl bych...

a ty se divíš, když máš WaitOne() v hlavním vlákně? ti zastaví vše... tohle se dělá obráceně, že WaitOne má druhý vlákno a hlavní to řídí

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #20
-
0
-

#19 ingiraxo
Aha takze si to prehodit a to WaitOne dat do vlakna ktore som vytvoril a potom zastavi len jeho teda pocka len to jedno vlakno kde je ten WaitOne .... a ten prvy obrazok co som pridal kde je ta metoda listen ktora bezi v samostatnom vlakne a tam je premenna receivedString .... ked ju chcem v druhej triede kontrolovat teda hladat v nej nejaky textovy retazec ako by si mi to odporucil spravit ? ta premenna sa stale meni dynamicky a potrebujem ju v tej druhej triede kontrolovat... to mam na obrazku dva kde hladam nejaku cast retazca v tej premennej

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #21
-
0
-

#20 Tayson
vše tam můžeš dělat v tom jednom vlákně a už jsem ti psal, že to můžeš udělat přes událost... se mi zdá, že hledáš nějaký složitý řešení

jediny co vlastně, chceš, je číst ze serveru, kde jsem teda pochopil, že to stále odesílá a ty chceš jen zachytávat a vykovávat akce.. nepotřebuješ složitý řešení

pokud to chceš zachytávat v další třídě, tak bud přes událost nebo delegátem, protože to potřebuješ zachytit jen tehdy, když to přijme ten string.. podivej se na moji ukázku pro Klienta a jeho použití, tam to mám

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #22
-
0
-

#21 ingiraxo
No asi hladam nejake zlozite resenie ... mas pravdu a asi sa zamotavam sam ..... no a ty tam mas udalost pre prijem .... mne to pride cez tu udalost zlozitejsie a cchem len tu prememnnu v druhej triede a porovnavat ju z retazcom .... ak ta premenna receivedString bude staticka tak v druhej triede by sa mi tiez mala menit dynamicky nie ? ... v com je pouzitie toho co hovorim ja ako o statickej premennej ine ako to ked pouzijem delegata ?

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #23
-
0
-

#22 Tayson
hlavně v tom, že ty to chceš porovnat jen tehdy, když přijde string... kdyby se ti to ukládalo do statický proměnný, tak je to jednak bezpečnostní blbost a taky nepoznáš. kdy se hodnota aktualizovala.. by si tam musel mít další vlákno který bude synchronizovaný s tím čtecím a bude oznavovat (opět nějakým způsobem) = zbytečně komplikovaný řešení

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #24
-
0
-

Takze ak som spravne pochopil tak mi odporucas si spravit udalost kde ak sa zmeni hodnota premennej receivedString tak iba vtedy bude porovnavat jej obsah z retazcom ktory hladam ? No ale ty to mas nejako hore moc zlozito zapisane a pozeram teraz na internete ako to je ale neviem no.

Pozeram ze prv treba spravit v mennom priestore toto :


public delegate void ChangedEventHandler(object sender, EventArgs e);

a potom 


public event ChangedEventHandler Changed;

a potom to spustim 


if (Changed != null) Changed(this, e);
ale neviem ako to implementovat do mojho programu ... pisat to do tej triedy kde to chcem porovnat tie stringy ? a ako tam dat tu premennu ?

 

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #25
-
0
-

#24 Tayson
to co jsem napsal, je nejkratší zápis události (jsem na to zvyklej).. a to co si napsal, tak to je událost s vlastním delegátem (taky může být, není to chyba)

nemusí to být ve jmenným prostoru, můžeš to dát klidně do třídy, která s tím bude pracovat (musí to být vždy public)

tu událost potom vyšleš (emitneš) v místě, kde potřebuješ (při tom čtení) a zachytíš mimo třídu, ale na tohle si prostuduj události.. osobně si myslím, že to je jednoduchá věc a v C# se události vytvářejí snad nejsnáze ze všech prog. jazyků :)

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #26
-
0
-

#25 ingiraxo
Este co sme sa hore bavili o tom EventWaitHandle ze to mam vymenit to WaitOne a Set tak proste ja potrebujem aby to hlavne vlakno pockalo kym mi ine vlakno konkretne to na obrazku dva nedokonci hladanie a nastavi ho Set ze moze porkacovat dalej to hlavne vlakno. Problem je ale v tom ze ked tam WaitOne tak zastavi vsetko ... neexistuje nieco cim mi hlavne vlakno pocka kym nedokonci vedlajsie vlakno ulohu ale pri tom cakani hlavneho vlakna nestavi ostatne spustene vlakna ?

Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #27
-
0
-

#26 Tayson
nic takovýho nejde a logicky je to i blbost, hlavní vlákno nemůžeš zastavit, je to i "rodič" všech podvláken. Pokud ho zastavíš, tak zastavíš vše, ale to už víš.

Prostě na hlavním vláknu vyhod třeba okno s textem "načítám" a jakmile se to načte, tak se okno zavře (pokud se to nepodaří, tak ukončí třeba program), ale nemůžeš zastavovat hlavní vlákno

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #28
-
0
-

#27 ingiraxo

Skusim ti to ukazat pretoze som uz zufaly

Toto mam napisane v triede s nazvom Class:

Připojen obrázek.

Připojen obrázek.

kde metoda chceck_alarm spustam vo vlakne t1 a metoda send_command spustam vo vlakne t2 a vo forme si volam metodu without_card.

Ide o to ye ja potrebujem stale kaydzch 5 sekund odosielat prikaz v send_comand vo vlakne a potom cakat vo vlakne chceck_alarm kedy pride ta spravna odpoved... ono moze prist aj hoci co ine preto porovnavam a ja potrebujem abz v metode without_card pockalo kym nenajde spravny retazec .... ale tam je to WaitOne takze zastavi vsetky vlakna a to je ten problem


Nahlásit jako SPAM
IP: 158.193.83.–
ingiraxo+15
Grafoman
29. 10. 2013   #29
-
0
-

#28 Tayson
Děláš si to strašně komplikovaný, proč tam máš druhý pomocný vlákno??

Hlavně ta tvoje funkce check_alarm je tak dokonalá, že se vykoná každých 100ms a co když zrovna spravná odpoved prijde po 50ms a spatná po dalších 20ms? Problem!

Udělěj to jak jsem psal a stačí ti bohatě jedno vlákno resp. async delegát v podobě BWorkeru a 2 události pro příjem zpráv a pro příjem té zprávy, která je pro tebe důležitá.. tohle si potom zachytíš třeba ve 100 různých třídách a bude to fungovat taky...

Ukážu teda znova jak by to mělo být, toho klienta jsem ti už posílal, takže jen upravim aby si tam měl teda ten Alarm, protože když tam neni, tak nějak nechápeš která bije :) 

Takže si představ, že server odesílá v náhodných intervalech třeba od 10ms do 1000ms zprávy a ty je zachytáváš... a klíčové slovo bude "porno", to je obdoba tvého "ID=0x84"

    // třída klienta
    public class Client
    {
        // vykoná se tehdy, pokud ze serveru přijde zpráva "porno"
        public event Action Alarm = delegate { };

        // soket klienta, který se připojuje k serveru
        private Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        // speciální vlákno
        private BackgroundWorker worker = new BackgroundWorker();

        public Client()
        {
            client.EnableBroadcast = true;
            client.Bind(new IPEndPoint(IPAddress.Any, 2000));

            // nastavení BWorkeru
            worker.WorkerReportsProgress = true;
            worker.DoWork += ProcReceive;
            worker.ProgressChanged += ProcAlarm;
        }

        public void Start()
        {
            worker.RunWorkerAsync();
        }

        // zkontroluje, jestli zpráva ze serveru je "porno", pokud bude, tak
        // se vykoná událost Alarm()
        private void ProcAlarm(object sender, ProgressChangedEventArgs e)
        {
            if (e.UserState.ToString() == "porno")
                Alarm();
        }

        // čte příchozí zprávy ze serveru a tuto funkci vykonává BWorker (vlákno)
        private void ProcReceive(object sender, DoWorkEventArgs e)
        {
            byte[] buffer = new byte[1024];

            while (true)
            {
                int read = client.Receive(buffer);
                string text = Encoding.ASCII.GetString(buffer, 0, read);

                // textovou hodnotu odešlu pro zpracování, výhoda toho je, že
                // CrossThread operace se automaticky ošetřuje, to znamená, že
                // není potřeba pozdější invokace ve Formu nebo v jiným vláknu
                worker.ReportProgress(0, text);
            }
        }
    }


Ve formu to potom bude vypadat takto 

    public partial class Form1 : Form
    {
        private Server s = new Server();
        private Client c = new Client();
        // formulář jako "čekací na zprávu serveru"
        private Form waitingForm = null;

        public Form1()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterScreen;

            // pokud ze serveru přijde zpráva "porno", tak se vykoná tato událost a
            // ukončí čakací formulář + nastaví text hlavního formuláře
            c.Alarm += () =>
            {
                waitingForm.Close();
                Text = "Zpráva přijata";
            };
        }

        // vykoná se hned po zobrazení hlavního okna
        protected override void OnShown(EventArgs e)
        {
            base.OnShown(e);

            c.Start();

            waitingForm = new Form();
            waitingForm.StartPosition = FormStartPosition.CenterParent;
            waitingForm.Controls.Add(new Label() { Text = "Čekám na zprávu..." });
            // je potřeba okno otevřít modálně, aby "zablokovalo" hlavní formulář
            waitingForm.ShowDialog(this);
        }
    }

Pokud ani tohle nepochopíš, tak opravdu už nevím, jak líp to vysvětlit =D

Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Tayson0
Stálý člen
29. 10. 2013   #30
-
0
-

#29 ingiraxo
Tak pekne si mi to rozpisal tak sa s tym idem popasovat .... Dakujem velmi pekne za tvoj cas 

Nahlásit jako SPAM
IP: 158.193.83.–
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, 48 hostů

 

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