Come posso usare async per aumentare le prestazioni di WinForms?

Stavo facendo un po ‘di lavoro pesante sul processore e ogni volta che ho iniziato a eseguire quel comando il mio winform si blocca di quanto non riesca a spostarlo fino a quando l’attività non è completata. Ho usato la stessa procedura da Microsoft ma nulla sembra essere cambiato.

il mio ambiente di lavoro è Visual Studio 2012 con .net 4.5

private async void button2_Click(object sender, EventArgs e) { Task task = OCRengine(); rtTextArea.Text = await task; } private async Task OCRengine() { using (TesseractEngine tess = new TesseractEngine( "tessdata", "dic", EngineMode.TesseractOnly)) { Page p = tess.Process(Pix.LoadFromFile(files[0])); return p.GetText(); } } 

Sì, stai ancora facendo tutto il lavoro sul thread dell’interfaccia utente . L’uso di async non sposterà automaticamente il lavoro su thread diversi. Puoi farlo anche se:

 private async void button2_Click(object sender, EventArgs e) { string file = files[0]; Task task = Task.Run(() => ProcessFile(file)); rtTextArea.Text = await task; } private string ProcessFile(string file) { using (TesseractEngine tess = new TesseractEngine("tessdata", "dic", EngineMode.TesseractOnly)) { Page p = tess.Process(Pix.LoadFromFile(file)); return p.GetText(); } } 

L’uso di Task.Run significherà che ProcessFile (il pezzo pesante di lavoro) viene eseguito su un thread diverso.

Puoi anche farlo avviando il tuo compito in una nuova discussione. Basta usare Thread.Start o Thread. ParameterizedThreadStart

Vedi questi per il vostro riferimento:

http://msdn.microsoft.com/en-us/library/system.threading.parameterizedthreadstart.aspx

Inizia il thread con i parametri