Frage

ich einen seltsamen Fehler haben, bitte, lassen Sie mich wissen, wenn Sie über den Grund irgendwelche Hinweise haben.

Ich habe eine Timer (System.Windows.Forms.Timer) auf meiner Haupt-Form, die einige Updates ausgelöst, die schließlich auch das Hauptformular UI aktualisieren. Dann habe ich einen Editor, der von der Hauptform mit dem ShowDialog() Verfahren geöffnet wird. Auf diesem Editor habe ich eine PropertyGrid (System.Windows.Forms.PropertyGrid).

Ich bin nicht in der Lage es jedes Mal zu reproduzieren, aber ziemlich oft, wenn ich Dropdown-Listen verwenden, auf diesem Grundstück Raster in Editor es stecken bleibt, das ist OK / Abbrechen Tasten schließen nicht die Form, Eigenschaft Gitter werden nicht nutzbar, Schließen-Schaltfläche Kopf arbeitet in der Form nicht.

Es gibt keine Ausnahmen im Hintergrund, und wenn ich den Prozess brechen Ich sehe, dass die App einige Berechnungen zu den Updates im Zusammenhang tut ich am Anfang erwähnt wurde.

Was können Sie empfehlen? Alle Ideen sind willkommen.

War es hilfreich?

Lösung

Was passiert, ist, dass das Verfahren Tick Thread-Timer nicht auf einem anderen Thread ausführt, so dass es Sperren alles andere, bis es fertig ist. Ich habe einen Test WinForms-Anwendung, die einen Timer und 2 Tasten auf sie, deren Ereignisse tat dies hatte:

private void timer1_Tick(object sender, EventArgs e)
{
    Thread.Sleep(6000);
}

private void button1_Click(object sender, EventArgs e)
{
    timer1.Start();
}

private void button2_Click(object sender, EventArgs e)
{
    frmShow show = new frmShow();
    show.ShowDialog(); // frmShow just has some controls on it to fiddle with
}

und in der Tat es blockiert, wie Sie beschrieben. Folgende gelöst es:

private void timer1_Tick(object sender, EventArgs e)
{
    ThreadPool.QueueUserWorkItem(DoStuff);
}

private void DoStuff(object something)
{
    Thread.Sleep(6000);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top