Domanda

Ho uno strano bug, per favore, fatemi sapere se avete qualche indizio circa la ragione.

Ho un Timer (System.Windows.Forms.Timer) sulla mia forma principale, che spara alcuni aggiornamenti, che anche alla fine aggiornare il modulo utente principale. Poi ho un editore, che è aperto dal modulo principale utilizzando il metodo ShowDialog(). Su questo editor ho un PropertyGrid (System.Windows.Forms.PropertyGrid).

Non sono in grado di riprodurlo ogni volta, ma abbastanza spesso, quando uso dropdowns su quella griglia delle proprietà nell'editor si blocca, che è OK / Cancel pulsanti non chiudono la forma, griglia delle proprietà diventa non utilizzabile, pulsante Chiudi sotto forma di intestazione non funziona.

Non ci sono eccezioni nei precedenti, e se rompo il processo vedo che l'applicazione sta facendo alcuni calcoli relativi agli aggiornamenti che ho citato all'inizio.

Cosa si può consigliare? Tutte le idee sono benvenute.

È stato utile?

Soluzione

Quello che sta succedendo è che il metodo Tick del timer filo non viene eseguito su un thread diverso, quindi è il blocco tutto il resto fino a quando il gioco è fatto. Ho fatto un'applicazione WinForms di prova che aveva un timer e 2 pulsanti su di esso le cui vicende ha fatto questo:

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
}

e in effetti bloccato come hai descritto. Di seguito risolto:

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

private void DoStuff(object something)
{
    Thread.Sleep(6000);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top