نوشته شده توسط
sajjadlove
با ترکیبی از thread و delegate ...
خود Delegate نه ترکیبش با Thread:
مرحله اول : تعریف delegate منطبق بر امضای متدی که عمل اسکن رو انجام میده
delegate return_type SampleDelegate(parameters);
توضیح : بجای parameters پارامترهای متد و بجای return_type نوع بازگشتی را قرار دهید
مرحله دوم : تعریف متد Callback که بعد از اتمام کار متد اسکن کننده فراخوانی خواهد شد
void Callback(IAsynchResult result){
...
}
مرحله سوم : ایجاد شی از delegate و فراخوانی آن بصورت Asynchronous (غیر همگام)
...
SampleDelegate d =new SampleDelegate(SampleMethod)
d.BeginInvoke(parameters,CallBack,d);
...
توضیح :
بجای parameters ، پارامترهای متد مورد نظرتون رو بنویسید
Callback همان متدی است که در مرحله 2 تعریف کرده ایم
d همان شی ساخته شده از delegate تعریف شده در مرحله 1 است.در بدنه متد Callback به این شی نیاز خواهیم داشت
این کد را در قسمتی از برنامه که آغاز کننده عمل اسکن هست قرار دهید، مثلا در رویداد کلیک دکمه اسکن
مرحله 4 : تکمیل بدنه متد Callback تعریف شده در مرحله 2
void Callback(IAsyncResult result){
SampleDelegate d = (SampleDelegate)result.AsyncState;
d.EndInvoke(result);
...
}
توضیح : از آنجاییکه این متد پس از پایان یافتن عملیات در متد اسکن کننده اجرا میشود ، میتوانید اعمالی میخواهید در این موقعیت انجام شود ، نظیر نمایش پیام اتمام اسکن، در این متد قرار دهید.