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

Kako napraviti "Please wait ... "

[es] :: .NET :: Kako napraviti "Please wait ... "

[ Pregleda: 3975 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dr.AgOlO
Milan D.
MunZe

Član broj: 16417
Poruke: 95
212.200.123.*



Profil

icon Kako napraviti "Please wait ... "08.04.2006. u 19:40 - pre 219 meseci
Pozdrav,
zanima me koji je najbolji nacin da se napravi upravo ovo tj. Please wait ... obavestenje koje ce recimo biti prikazano u novoj formi.
Ja sam nesto pokusavao sa nitima ali mi bas nesto ne ide. Ovo bi mi mnogo znacilo jer mi se cesto desi da mi je potrebna ovakva funkcionalnost,
pogotovo kad se radi nesto sa bazom ili se nesto vuce sa neta ... i kada treba pored tekuce niti koja radi posao da se pokrene jos neka koja ce
upravo da prikaze taj text i nakon zavrsavanja posla glavne niti da isti tekst sakrije ... da ne duzim sigurno ste xxx puta videli ovo u nekom software-u.
Jos jednom koji je najbolji nacin da se ovo odradi.

Unapred hvala.
 
Odgovor na temu

barneymdx
Slavisa Radicevic
Nova Pazova

Član broj: 27194
Poruke: 12
195.252.87.*



Profil

icon Re: Kako napraviti "Please wait ... "09.04.2006. u 21:33 - pre 219 meseci
public partial class PleaseWait : Form
{
public PleaseWait()
{
//prosta forma sa jednim labelom
InitializeComponent();
}
public void Show(string Message) //Poruka koja će se prikazati...u tvom slučaju please wait...
{

label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
label1.Text = Message;
this.Show();
Application.DoEvents();
}
}
 
Odgovor na temu

Oliver Klaćik
Vice President, Thunder Road Software
Inc.
Stara Pazova

Član broj: 34059
Poruke: 242
80.93.231.*

Sajt: www.thunderroadsoftware.c..


Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 08:18 - pre 219 meseci
Ne bih ti savetovao da za to koristiš niti. Jedino ima smisla da napraviš odvojeni thread, kada hoćeš da se neki duži posao odradiš van glavnog thread-a, da ne bi izgubio funkcionalnost UI-a. Znači, Please Wait... ostaje na glavnom thread-u, a posao koji treba da se odradi ide na new thread.

Inače, sve se svodi na to da u obradi događaja završetka procesa, ili zatvoriš formu, ili promeniš tekst, šta god da već hoćeš da uradiš.

A za step-by-step primere o pravljenju novih thread-ova, pogledaj MSDN... Ima fino objašnjenje...
Oliver 'FAQ' Klaćik
 
Odgovor na temu

dr.AgOlO
Milan D.
MunZe

Član broj: 16417
Poruke: 95
212.200.123.*



Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 08:37 - pre 219 meseci
U pocetku sam i ja mislio da je najbolje da postojece metode koje mogu da izazovu bokiranje programa stavim u posebnu nit, a to sam radio tako sto sam napravio recimo za metodu
Code:

public void btnStatistika(object sender, System.EventArgs e)
{
  // kod koji radi nesto sa bazom, preko mreze ...
}

napravio metodu sa potpisom koji odgovara delegatu ThreadStart
Code:

public void btnStatistika()
{
    // kod koji radi nesto sa bazom, preko mreze ...
    // Posebna WinForma
    pleaseWait.Hide();
}

public void btnStatistika(object sender,System.EventArgs e)
{
  Thread workerThread = new Thread(new ThreadStart(btnStatistika));
  workerThread.Start();
  pleaseWait.Show();
}


I ovo resenje mi je delovalo sasvim ok, ali mi se tada u nekim metodama javljao Exception, da ne mogu da u drugoj niti koristim kontrole koje su napravljene u jednoj niti. Posto ovaj problem nisam mogao da resim morao sam da nadjem drugo resenje. Sada mi je resenje sledece :

Code:

public void btnStatistika(object sender,System.EventArgs e)
{
  Thread workerThread = new Thread(new ThreadStart(ShowPleaseWait));
  workerThread.Start();
  // kod koji radi nesto sa bazom, preko mreze ...
  pleaseWait.Close();
}
public void ShowPleaseWait()
{
  pleaseWait.ShowDialog();
}


Nista bolje za sad ne mogu da smislim, ali i dalje mislim da mi je prvo resenje bolje ali mi ostaje taj problem tj. Exception.
U principu me zanima da li je ovo drugo resenje da kazem optimalno, zbog stalnog koriscenja niti ? Ali opet bez koriscenja niti ja ne vidim kako bi moglo ovo sto ja
hocu da se odradi.

Poz.
 
Odgovor na temu

djordjeno
Srbija

Član broj: 35204
Poruke: 332
*.smin.sezampro.yu.

Sajt: www.mobitel.si


+42 Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 08:53 - pre 219 meseci
Pozdrav,

Tacno je da iz jednog thread-a (niti) ne mozes da pristupas kontrolama koje se nalaze u drugom.

Ako to zelis da uradis pogledaj u MSDN-u MethodInvoker i metodu BeginInvoke().

To ce resiti tvoje probleme.

 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 13:14 - pre 219 meseci
Citat:
dr.AgOlO: U pocetku sam i ja mislio da je najbolje da postojece metode koje mogu da izazovu bokiranje programa stavim u posebnu nit, a to sam radio tako sto sam napravio recimo za metodu


Poslusaj Olivera.

Sama cinjenica da prikazuejs "Please wait" znaci da ne ocekujes (i neces) da korisnik i dalje koristi program dok se proces ne zavrsi. Samim tim nema potrebe da se petljas sa threadovima i da drzis glavni thread neaktivnim. Sve sto ti treba mozes da odradis u glavnom thread-u. Ako bas statisticki proces traje mnogo dugo, mozes iz njega periodicno da pozivas Application.DoEvents da ti aplickacija ne bi postala ""urnesponsive" i to je to.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

radoica

Član broj: 12972
Poruke: 158
*.yubc.net.



+3 Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 23:02 - pre 219 meseci
Moze da se iskljuci bacanje izuzetka kada jedna nit pristupa kontrolama koje je kreirala druga nit. Dovoljno je postaviti Control.CheckForIllegalCrossThreadCalls na false.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Kako napraviti "Please wait ... "10.04.2006. u 23:47 - pre 219 meseci
Citat:
radoica: Dovoljno je postaviti Control.CheckForIllegalCrossThreadCalls na false.


Vrlo nepreporucljivo. Taj property je true sa razlogom. Cross threading u GUI-u generalno nije problem .NET-a, vec WIndows-a. Iza svakog Windows Handle-a postoji citava memorijska struktura i pozivi API funkcija nisu thread-safe (u suprotnom bi morao da se radi locking na svaki API poziv koji koristi handleove pa bi windows bio katastrofalno sporiji nego sto vec jeste ). Bolje exception u aplikaciji nego BSoD
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: Kako napraviti "Please wait ... "

[ Pregleda: 3975 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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