نمایش نتایج 1 تا 7 از 7

نام تاپیک: فرم مشغول ( Busy Form (

  1. #1

    فرم مشغول ( Busy Form (

    سلام دوستان
    سوال من در این مورده که چطور می تونیم کنترل کنیم یک فرم وقتی در حال انجام یک فعالیت هست اصطلاحا قفل نشه و یا کل فرم سفید رنگ نشه
    برای مثال من در فرمم میخوام عملیات دانلود یک صفحه از اینترنت انجام بشه این کار رو با WebClient انجام میدم ولی مشکل اینه که تا زمانی که صفحه گرفته میشه کل فرم قفله و هیچ کار دیگه ای نمیشه انجام داد. نمیشه این پروسه رو به BackGround فرستاد و مثلا در فرم یک چیزی باشه که بنویسه در حال دریافت صفحه ؟ تقریبا شبیه Ajax ?
    آرزوی موفقیت برای همه شما رو دارم
    ممنون

  2. #2
    کاربر دائمی آواتار debugger
    تاریخ عضویت
    اردیبهشت 1387
    محل زندگی
    Turkey
    پست
    843

    نقل قول: فرم مشغول ( Busy Form (

    من هم وقتي دارم اسكن مي كنم تا عكس را در picture box فرم بزارم ف موقع اسكن برنامه گير مي كنه و فرم سفيد ميشه

    من اين كار را مي كنم

    form1.enabled=false

    كد هاي اسكن

    form1.enabled=true

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: فرم مشغول ( Busy Form (

    بهتره کار جدید را توسط یک thread جدید اجرا کنید.در مورد Thread توضیحات زیادی در فروم شده جستجو کنید پیدا میکنید.

  4. #4
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: فرم مشغول ( Busy Form (

    بهتره کار جدید را توسط یک thread جدید اجرا کنید.در مورد Thread توضیحات زیادی در فروم شده جستجو کنید پیدا میکنید.
    با ترکیبی از thread و delegate شما می تونید به این منظور دست پیدا کنید.همچنین می تونید از BackgroundWorker استفاده کنید..
    ...
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  5. #5
    کاربر تازه وارد آواتار Sociant
    تاریخ عضویت
    آبان 1387
    محل زندگی
    اراک
    پست
    88

    نقل قول: فرم مشغول ( Busy Form (

    نقل قول نوشته شده توسط 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);
    ...
    }

    توضیح : از آنجاییکه این متد پس از پایان یافتن عملیات در متد اسکن کننده اجرا میشود ، میتوانید اعمالی میخواهید در این موقعیت انجام شود ، نظیر نمایش پیام اتمام اسکن، در این متد قرار دهید.

  6. #6

    نقل قول: فرم مشغول ( Busy Form (

    ممنون از راهنماییتون

  7. #7
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: فرم مشغول ( Busy Form (

    خود Delegate نه ترکیبش با Thread:
    راه ای رسیدن به خدا خیلیه.....

    private void button1_Click_1(object sender, EventArgs e)
    {
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(start));
    t.Start();
    }

    private void start()
    {
    //any code here
    this.Invoke(new Del(MainFunction));
    }

    private void MainFunction()
    {
    //any code here
    }
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •