Avatar billede tandpine Nybegynder
01. februar 2005 - 22:00 Der er 5 kommentarer og
1 løsning

Form der venter

Hejsa

Jeg er i gang med et projekt hvor jeg har en Form der skal hente en masse data ind fra en database. Det tar lidt tid, så mens den kører (og inden den faktisk har vist Form'en) ville jeg så lave en anden lille form hvor der er et par labels jeg skal kunne ændre i undervejs, så jeg kan skrive hvor langt den er.
Problemet er at der hvor den skal vise den label, bare viser en sort firkant nu, indtil den er færdig med at indlæse dataerne.

Er der nogen der kan hjælpe mig?

her er lidt af koden:
public Form1()
{
  WaitForm waitfrm = new WaitForm(strPrgName);
 
  hent en masse ting....
  waitfrm.Close();
}

klassen WaitForm:

class WaitForm : Form
{
string    label1Txt = "Tester";
string    label2Txt = "Tester";

Label    label1;
Label    label2;

public WaitForm(string Title)
{
Text = Title;
Width = 200;
Height = 100;
label1 = new Label();
label1.Parent = this;
label1.Text = label1Txt;
label1.AutoSize = true;
label1.Top=ClientSize.Height/2 - Font.Height;
label1.Left= (ClientSize.Width - label1.Width) /2;

this.Show();
}
Avatar billede driis Nybegynder
01. februar 2005 - 22:11 #1
Det skyldes at din WaitForm kører i samme tråd som den der henter data ind. Derfor processerer den ikke sine Windows messages mens du henter data. Du kan løse det ved at hente data ind i en seperat tråd og fyre en event når den er færdig.
Avatar billede tandpine Nybegynder
01. februar 2005 - 22:13 #2
Kan du evt fortælle mig hvordan jeg gør det.. er ikke lige en haj til det med tråde ?
Den henter en masse dataer ind som jeg smider i en treeview.
Avatar billede driis Nybegynder
01. februar 2005 - 22:25 #3
Jeg har ikke lige en compiler foran mig nu, men jeg kan da lige ridse op:

Lav en metode som udfører arbejdet og fyrer en event bagefter:
public void DoStuff()
{
  // lav en helt masse data
  // ...
  // ...
  // Fyr en event, som fortæller din Form1 at DoStuff() er færdig.
}

I din Form1 kan du så bruge System.Threading.Thread.QueueUserWorkItem til at starte en tråd som kører DoStuff. Når din eventhandler kaldes (som du har sat op før DoStuff køres), er DoStuff færdig. Så kan du fjerne din WaitForm, etc.
Avatar billede tandpine Nybegynder
02. februar 2005 - 22:11 #4
Hmm.. måske jeg ikke er helt så meget inde i alt det der, men måske du kort kan ridse et eksempel sammen. Har desværre ikke været hjemme før nu.
Avatar billede tandpine Nybegynder
12. februar 2005 - 19:05 #5
Nååh.. det gad du åbenbart ikke ?? ikke andre der lige har et forslag ?
Avatar billede tandpine Nybegynder
11. oktober 2005 - 18:58 #6
Nå.... lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester