应用程序GUI的频繁 [英] Frezzing of application GUI

查看:53
本文介绍了应用程序GUI的频繁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写指纹应用程序,用数字

角色和SourceAFIS提取指纹模板。但是SourceAFIS的提取需要时间,所以我用了一个

的backgroundWorker来运行它。即便如此,它仍会冻结我的GUI大约30

秒。我不知道我在代码中做错了什么。这是一个摘录

I''m writting a fingerprint apps which extracts fingerprint templates with both digital
persona and SourceAFIS. But the SourceAFIS extraction takes time so i used a
backgroundWorker to run it. Even at that, it still freezes my GUI for approximately 30
seconds. I don''t know what i''ve done wrongly in the code. Here is an extract

private void enroll_Click(object sender, EventArgs e) 
{ 
if (enrollmentWorkerBW.IsBusy == false) { 
enroll.Enabled = false; 
enroll.Text = "Wait !";
 progressPB.Visible = true; 
enrollmentWorkerBW.RunWorkerAsync();
 } 
else { 
MessageBox.Show("Enrollment is already Running","Enrollment Message",MessageBoxButtons.OK,MessageBoxIcon.Information); }
 } 

private void enrollmentWorkerBW_DoWork( object sender, DoWorkEventArgs e) 
{ 
this.Invoke(new Function(delegate() 
{ 
AfisEngine AFIS = new AfisEngine(); 
Bitmap bitmap = null; 
DPFP.Capture.SampleConversion Convertor = new DPFP.Capture.SampleConversion(); 
// Create a sample convertor. Fingerprint fingerprint; for (int i = 0; i <
printTemplates.Length; i++) { switch (i + 1) { case 1: getTemplate(printTemplates[i], ref T_
thumbR, (i + 1)); //getPartialPrintsTemplate(printSamples[i], ref partial_T_thumbR, (i + 1))
;                                     getSample(printSamples[i], ref S_thumbR, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_thumbR = fingerprint.Template; else partial_T_
thumbR = null; break; case 2: getTemplate(printTemplates[i], ref T_indexR, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_indexR, (i + 1))
;                                     getSample(printSamples[i], ref S_indexR, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_indexR = fingerprint.Template; else partial_T_
indexR = null; break; case 3: getTemplate(printTemplates[i], ref T_middleR, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_middleR, (i + 1))
;                                     getSample(printSamples[i], ref S_middleR, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_middleR = fingerprint.Template; else partial_T_
middleR = null; break; case 4: getTemplate(printTemplates[i], ref T_ringR, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_ringR, (i + 1) )
;                                     getSample(printSamples[i], ref S_ringR, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_ringR = fingerprint.Template; else partial_T_ringR
= null; break; case 5: getTemplate(printTemplates[i], ref T_smallR, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_smallR, (i + 1))
;                                     getSample(printSamples[i], ref S_smallR, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_smallR = fingerprint.Template; else partial_T_
smallR = null; break; case 6: getTemplate(printTemplates[i], ref T_thumbL, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_thumbL, (i + 1))
;                                     getSample(printSamples[i], ref S_thumbL, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_thumbL = fingerprint.Template; else partial_T_
thumbL = null; break; case 7: getTemplate(printTemplates[i], ref T_indexL, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_indexL, (i + 1))
;                                     getSample(printSamples[i], ref S_indexL, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_indexL = fingerprint.Template; else partial_T_
indexL = null; break; case 8: getTemplate(printTemplates[i], ref T_middleL, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_middleL, (i + 1))
;                                     getSample(printSamples[i], ref S_middleL, (i + 1)); bitmap = null;
Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint = new Fingerprint();
fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_middleL = fingerprint.Template; else partial_T_
middleL = null; break; case 9: getTemplate(printTemplates[i], ref T_ringL, (i + 1)); //
getPartialPrintsTemplate(printSamples[i], ref partial_T_ringL, (i + 1)) ;
getSample(printSamples[i], ref S_ringL, (i + 1)); bitmap = null; Convertor.ConvertToPicture
(printSamples[i], ref bitmap); fingerprint = new Fingerprint(); fingerprint.BitmapImage =
bitmap; //st.Start(); AFIS.Extract(fingerprint); if (fingerprint.Template != null) partial_T_ ringL = fingerprint.Template; else partial_T_ringL = null; break; case 10: getTemplate
(printTemplates[i], ref T_smallL, (i + 1)); //getPartialPrintsTemplate(printSamples[i], ref
partial_T_smallL, (i + 1));                                     getSample(printSamples[i], ref S_smallL, (i +
1)); bitmap = null; Convertor.ConvertToPicture(printSamples[i], ref bitmap); fingerprint =
new Fingerprint(); fingerprint.BitmapImage = bitmap; //st.Start(); AFIS.Extract
(fingerprint); if (fingerprint.Template != null) partial_T_smallL = fingerprint.Template; else partial_T_smallL = null; break; } } } }

推荐答案

BackgroundWorker在ThreadPool线程上执行代码以确保UI线程是空闲的并且可以继续处理事件。



在您的DoWork方法中,调用Control.Invoke会导致代码在UI线程上执行。总体效果是您希望在工作线程上运行的代码实际上在UI线程上运行。



Alan。
The BackgroundWorker executes code on a ThreadPool thread to ensure that the UI thread is free and can continue to process events.

In your DoWork method there is a call of Control.Invoke which causes the code to execute on the UI thread. The overall effect is that the code that you wanted to run on the worker thread is actually running on the UI thread.

Alan.


这篇关于应用程序GUI的频繁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆