2013-02-19 32 views
23

i bazı işlemci ağır görev ve i görev tamamlanıncaya kadar ben bile etrafında hareket olamaz daha o komutunu benim winform donar yürütme her başlattığınızda yapıyordu. Microsoft'un aynı prosedürünü kullandım ama hiçbir şey değişmiş gibi görünmüyor.nasıl WinForms performansını artırmak için zaman uyumsuz kullanabiliriz?

benim çalışma ortamı .net 4,5

private async void button2_Click(object sender, EventArgs e) 
{ 
    Task<string> task = OCRengine();   
    rtTextArea.Text = await task; 
} 

private async Task<string> OCRengine() 
{ 
    using (TesseractEngine tess = new TesseractEngine(
      "tessdata", "dic", EngineMode.TesseractOnly)) 
    { 
     Page p = tess.Process(Pix.LoadFromFile(files[0])); 
     return p.GetText(); 
    } 
} 
+1

görünüyor. Bazı temel tanıtımları okumanı tavsiye ederim. Beklemek örneğin iş parçacığı programlamaz. – usr

cevap

50

Evet, hala UI iş parçacığı tüm çalışmaları yapıyoruz görsel stüdyo 2012'dir. async kullanmak, işi farklı konulara otomatik olarak boşaltmayacak. Sen bu olsa yapabilirdi:

private async void button2_Click(object sender, EventArgs e) 
{ 
    string file = files[0]; 
    Task<string> 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(); 
    } 
} 

Task.Run kullanımı ProcessFile (işin ağır parça) farklı bir iş parçacığı üzerinde yürütülür anlamına gelecektir.

+4

+1. Benzer örneğe ilişkin ayrıntılı açıklama içeren bir bağlantı daha - http://visualstudiomagazine.com/articles/2012/08/01/performance-tips.aspx –

+0

bu satır olmamalıdır. Görev görev = Görev.Run (() = > ProcessFile (dosya)); 'böyle olması:' görev görev = Task.Run (() => return ProcessFile (dosya)); '? – Prokurors

+2

@Prokurors: Hayır. İfade gövdeli lambda ifadelerinin dönüş ifadeleri yoktur. –

İlgili konular