Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C# funkcije u pozadini da ne zablesave formu

[es] :: .NET :: .NET Desktop razvoj :: C# funkcije u pozadini da ne zablesave formu

[ Pregleda: 3643 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

xxxrugby

Član broj: 16068
Poruke: 653
*.adsl.net.t-com.hr.

Sajt: www.zagreb-rugby.hr


Profil

icon C# funkcije u pozadini da ne zablesave formu29.01.2008. u 20:55 - pre 197 meseci
Bok.
Imam napravljen programicic koj mi pinga neke od servera te se preko TCP-a konektira na odredjene portove.
To je ovako samo za provjeru dali je port dostupan da radi.

Uglavnom dok se to sve vrti to traje neko vrijeme jedno 15-ak sekundi. Sve to vrijeme je ono forma zablesavljena ne moze se vidjet Real Time log sta se radi i upisuje u RichTBox.

Svaka od radnji je zasebna fuknkcija.

Imate koj hint kako to napravit da dok se funkijca odvija po formi se moze klikat i vidi se tocno u RichTBox-u u kojem je statusu. A ne da sve izbaci odjednom.
xxxrugby: "We are all philosophers, when question is about politics!"
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12848



+4784 Profil

icon Re: C# funkcije u pozadini da ne zablesave formu29.01.2008. u 21:35 - pre 197 meseci
Pozovi Application.DoEvents() metod da se osvezi interface i da odgovori na dogadjaje.
 
Odgovor na temu

Pharos
Pančevo

Član broj: 20664
Poruke: 1029
*.adsl-1.sezampro.yu.



+2 Profil

icon Re: C# funkcije u pozadini da ne zablesave formu29.01.2008. u 23:04 - pre 197 meseci
Koristiš li threadove?
77 77 77 2E 65 73 6E 69 70 73 2E 63 6F 6D
 
Odgovor na temu

sallle
Sasa Ninkovic
GTECH
Beograd

Član broj: 146
Poruke: 480
*.adsl.beotel.net.

ICQ: 20785904


+4 Profil

icon Re: C# funkcije u pozadini da ne zablesave formu30.01.2008. u 00:22 - pre 197 meseci
a imas i kontrolu backgroundworker (imas na msdnu kako da je koristis) - al cini mi se da je nekako elegantnije i lakse da sam pravis novi thread
 
Odgovor na temu

DjordjeRd
Đorđe Radomirović
Kablovski pristupni uređaji, Telekom
Srbija
NP, 43.1370N, 20.5120E

Član broj: 1412
Poruke: 574
*.telekom.yu.

Sajt: picasaweb.google.com/djor..


+4 Profil

icon Re: C# funkcije u pozadini da ne zablesave formu30.01.2008. u 10:57 - pre 197 meseci
http://support.microsoft.com/kb/315577

Eto rešenja i za VB 2005. Isprobano, radi, lako se kapira.
c000 lda #$33
c002 sta $0400
c005 lda #$37
c007 sta $0401
c00a lda #$21
c00c sta $0402
c00f rts

sys 49152
 
Odgovor na temu

xxxrugby

Član broj: 16068
Poruke: 653
*.adsl.net.t-com.hr.

Sajt: www.zagreb-rugby.hr


Profil

icon Re: C# funkcije u pozadini da ne zablesave formu30.01.2008. u 11:19 - pre 197 meseci
E sad sam gledao to po netu i nikako da nadjem neki dobar tutorial.

Uglavnom. Ako ocu da skroz izbacim taj zaseban thread ipak treba mu poslat neke parametre. A to mi nikako nejde.
A i taj thread bi mi trebao vratit neki parametar.
Al taj dio nisam nigdje nasao dobro opisan.
Ukoliko ja to skroz izoliram i kroz kod napucam parametre onda to radi super. Al to nije to. Trebao bi u thread nesto poslat i on mi nesto vratit.

[Ovu poruku je menjao xxxrugby dana 30.01.2008. u 20:52 GMT+1]

Ok. Iskoristio sam txt file kao temp pohrana i vucenje podataka.
Kako da pricekam thread pa kad zavrsi da onda program ide dalje. Danke.

Ukoliko stavim
do
{
Thread.Sleep(1);
} while (trd.IsAlive);
OPed mi je zablesavljena glavna forma. Pa onda s tim nisam nista dobio.

[Ovu poruku je menjao xxxrugby dana 30.01.2008. u 22:29 GMT+1]
xxxrugby: "We are all philosophers, when question is about politics!"
 
Odgovor na temu

Bojan Komazec
Bojan Komazec

Član broj: 41269
Poruke: 11
..nge86-134.btcentralplus.com.



Profil

icon Re: C# funkcije u pozadini da ne zablesave formu30.01.2008. u 21:47 - pre 197 meseci
Pretpostavimo da na Form-u imas dve kontrole, jedan Button (sa textom npr. "Ping") i TextBox (ili vec neku kontrolu u kojoj mozes da prikazes multiline text kao i da append-ujes (dodajes na kraj) nove poruke na postojece). Pretpostavimo da zelis da pingovanje i rad sa socketima pocne kada korisnik pritisne Button "Ping". Kreiraj event-handler za event Click. Neka se zove button_Click(). U njemu kreiraj i pokreni thread. Za parametre thread-a je najbolje da kreiras svoju custom klasu ciji ce member-i nositi informacije. Npr. recimo da je parametar thread-a timeout (koliko zelis da cekas npr. na odgovor sa servera).

Code:

using System;
using System.Windows.Forms;
using System.Threading;

namespace ControlsTest1
{    
    public partial class Form1 : Form
    {
        protected delegate void AppendTextCallback(string textToAppend);


        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //  disable-uj button "Ping"

            // ispali thread
            ThreadParams threadParams = new ThreadParams();
            threadParams.GetTimeout = 1000;

            Thread workerThread = new Thread(new ParameterizedThreadStart(DoPinging));
            workerThread.IsBackground = true;
            workerThread.Start(threadParams); // ovde prosledjujes parametre u thread metodu
        }

        // ova metoda se izvrsava u novom thread-u
        // ako iz nje zelis da menjas atribute neke GUI kontrole, moras da koristis InvokeRequired/Invoke() i delegat
        private void DoPinging(object arg)
        {
            // object moras cast-ovati na odgovarajuci klasni tip - ThreadParams
            ThreadParams threadParams = (ThreadParams)arg;

            int timeout = threadParams.GetTimeout;

            //...ovde radi sta god hoces sa socketima, otvaraj, pinguj...koristi timeout...

            // Za svaju akciju koja se (iz)vrsi zelis da dodas text u textBox.
            // Evo kako ces to da uradis:
            
            // recimo da zelis da posaljes poruku "Pinging IP1..."
            AppendText("Pinging IP1...");

            // ..nastavi sa pingovanjem drugog servera...

            // ...ponovo dodaj poruku...

            // na samom kraju: enable-uj button "Ping", koristeci dodatni delegat i helper f-ju
        }

        // helper f-ja za rad sa GUI kontrolom 
        protected void AppendText(string textToAppend)
        {
            if (this.textBox1.InvokeRequired)
            {
                AppendTextCallback callback = new AppendTextCallback(AppendText);
                this.Invoke(callback, new object[]{textToAppend});
            }
            else
            {
                this.textBox1.AppendText(textToAppend);
            }
        }
    }

   // najprostija klasa...
   // najbolje da je deklarises u posebnom .cs fajlu
   // ako ipak zelis da bude ovde, stavi je POSLE deklaracije Form-e, inace ce ti VS Designer 
   // prijavljivati gresku 
    public class ThreadParams
    {
        private int timeout;

        public int GetTimeout
        {
            get
            {
                return timeout;
            }
            set
            {
                timeout = value;
            }
        }
    }
}


Ovako ce ti GUI (Forma i kontrole na njoj) ostati "odmrznute" i potpuno funcionalne dok ce se u pozadini izvrsavati socket-ski deo posla...

[Ovu poruku je menjao komarabbit dana 31.01.2008. u 10:51 GMT+1]
 
Odgovor na temu

xxxrugby

Član broj: 16068
Poruke: 653
*.adsl.net.t-com.hr.

Sajt: www.zagreb-rugby.hr


Profil

icon Re: C# funkcije u pozadini da ne zablesave formu02.02.2008. u 15:49 - pre 197 meseci
Hvala.
To mi radi kada sam tako postavio.

E sad ja pozivam taj thread unutar for petlje.

Radim ovako

Code:

for (nest; nest; nest)
{
    //sad pozovam thread za ping
   //sad pozivam thread za TCP porting check
}


No kad to napravim pokrene mi se cjela petlja odjednom. Ono nema strukture.

Dali moze nesto ovako

Code:

for (nest; nest; nest)
{
    //sad pozovam thread za ping
              // da sad foma nebude zablesavljena ono forma normalna dobiva inpute al radi thread za ping (samo jedan thread dalje se ne izvrsava For petlja)

   //sad pozivam thread za TCP porting check
              // da sad foma nebude zablesavljena ono forma normalna dobiva inpute al radi thread za TCP (samo jedan thread dalje se ne izvrsava For petlja)
}

xxxrugby: "We are all philosophers, when question is about politics!"
 
Odgovor na temu

Predrag Glumac
Luxembourg

Član broj: 167588
Poruke: 127
*.eunet.yu.



Profil

icon Re: C# funkcije u pozadini da ne zablesave formu02.02.2008. u 16:27 - pre 197 meseci
Ako se ta petlja pokrece iz glavne forme, onda ne moze. Napravi thread koji ce da vrti petlju, a izbaci threadove za ping i TCP (ako pingovanje mora da se izvrsi pre rada sa TCPem).
 
Odgovor na temu

xxxrugby

Član broj: 16068
Poruke: 653
*.adsl.net.t-com.hr.

Sajt: www.zagreb-rugby.hr


Profil

icon Re: C# funkcije u pozadini da ne zablesave formu02.02.2008. u 16:50 - pre 197 meseci
Hvala na odgovoru.
Bas sam to poceo da radim. Izbacio sam thredove.

Napravio sam jedan thread u kojemu se iz ThreadParam povlace parametri dali da radi oboje ili samo jedno.

Jos jedino moram napravit prosljedit LB u Thread. A vec cu otkrit kako, vjerojatno preko string[].

Hvala na odgovorima.
xxxrugby: "We are all philosophers, when question is about politics!"
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: C# funkcije u pozadini da ne zablesave formu

[ Pregleda: 3643 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.