Click here to Skip to main content
15,894,540 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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
C#
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; } } } }
Posted
Updated 5-Apr-13 1:32am
v2
Comments
[no name] 5-Apr-13 7:23am    
For heavens sake format your code. hardly anyone is going to read this.
Emejulu JVT 5-Apr-13 8:18am    
sorry about that, it was shattered by my browser. I'm really sorry.

1 solution

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.
 
Share this answer
 
Comments
Emejulu JVT 5-Apr-13 8:15am    
thanks a lot, i missed that one. I'll rewrite soon. I'll like to be in touch if u don't mind.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900