Hoe kan ik de code laten uitvoeren nadat een formulier is weergegeven? (Problemen met "weergegeven".)

Ik dacht dat getoond het antwoord zou zijn. Maar het lijkt erop dat niet alle bedieningselementen gelijk zijn. Een paneel wordt onmiddellijk weergegeven, terwijl een label - niet.

Ik heb de volgende code:

public partial class Form2 : Form
{
    Panel p = new Panel() { BackColor = Color.Green };
    Label l = new Label() { Text = "abc", Location = new Point(0, 100) };

    public Form2()
    {
        Controls.Add(p);
        Controls.Add(l);

        Shown += new EventHandler(Form2_Shown);
    }

    void Form2_Shown(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(2000);
    }
}

Wat in eerste instantie dit laat zien:

enter image description here

En na 2 seconden - dit:

enter image description here

Dus hoe voer ik code uit na "de tweede afbeelding"?

1

2 antwoord

void Form2_Shown(object sender, EventArgs e)
{
    Application.DoEvents();
    System.Threading.Thread.Sleep(2000);
}

Ik denk dat je krijgt wat je wilt, maar IMHO als je een lange operatie hebt, moet je een nieuwe thread beginnen.

2
toegevoegd
De lange bewerking toont dingen op het formulier, zodat de gebruiker ze kan zien worden toegevoegd.
toegevoegd de auteur ispiro, de bron
Je moet het nog steeds in een andere thread doen. Als u dingen in de hoofd UI-thread doet, blokkeert u de gebruiker om dingen te doen zoals op knoppen drukken of het venster verplaatsen en wordt het venster geblokkeerd geen updates uit te voeren voor de besturingselementen ervan. Een kopie van een bestand in Windows doet bijvoorbeeld werk en het bijwerken van de UI-voortgangsbalk, maar u kunt het venster Kopiëren nog steeds verplaatsen.
toegevoegd de auteur beater, de bron

Voeg het volgende toe aan het begin van de gebeurtenishandler:

this.Update();
0
toegevoegd