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

نام تاپیک: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

  1. #1
    کاربر دائمی آواتار aghayex
    تاریخ عضویت
    دی 1388
    محل زندگی
    https://telegram.me/Sed_kazem18
    پست
    924

    دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    دوستان من یه دیتا گرید دارم که برای پر کردنش از یه تابع استفاده می کنم حالا می خام این رو در یه ترد مجزا انجام بدم آیا دوستان روشی سراغ دارند که بشه با اون از طریق یه ترد یا BackgroundWorker به اشیای ترد اصلی برنامه دسترسی داشت

  2. #2
    کاربر دائمی
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    آمل
    پست
    207

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    نقل قول نوشته شده توسط aghayex مشاهده تاپیک
    دوستان من یه دیتا گرید دارم که برای پر کردنش از یه تابع استفاده می کنم حالا می خام این رو در یه ترد مجزا انجام بدم آیا دوستان روشی سراغ دارند که بشه با اون از طریق یه ترد یا BackgroundWorker به اشیای ترد اصلی برنامه دسترسی داشت
    سلام

    CheckForIllegalCrossThreadCalls = false;

  3. #3
    کاربر دائمی آواتار aghayex
    تاریخ عضویت
    دی 1388
    محل زندگی
    https://telegram.me/Sed_kazem18
    پست
    924

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    ممنون از جوابت اما این کد رو در کجا بنویسم

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
    Thread t1 = new Thread(new ThreadStart(Askh_nh));
    t1.Name = "Anh";
    t1.Start();

    Thread t2 = new Thread(new ThreadStart(Bskh_nh));
    t2.Name = "Bnh";
    t2.Start();

    Thread t3 = new Thread(new ThreadStart(Cskh_nh));
    t3.Name = "Cnh";
    t3.Start();
    }
    private void Askh_nh()
    {
    a = new SKHAEntities();
    CollectionViewSource anh = ((CollectionViewSource)(this.FindResource("anh"))) ;
    ObjectQuery<systema.nh> anhQuery = a.nhs;
    Action action=delegate
    {
    anh.Source = anhQuery.Execute(MergeOption.AppendOnly);
    };
    anh.Dispatcher.Invoke(DispatcherPriority.Normal, action);
    //a.Dispose();
    }

    private void Bskh_nh()
    {
    b = new SKHBEntities();
    CollectionViewSource bnh = ((CollectionViewSource)(this.FindResource("bnh"))) ;
    ObjectQuery<systemb.nh> bnhQuery = b.nhs;
    Action action = delegate
    {
    bnh.Source = bnhQuery.Execute(MergeOption.AppendOnly);
    };
    bnh.Dispatcher.Invoke(DispatcherPriority.Normal, action);
    //bskh.Dispose();
    }

    private void Cskh_nh()
    {
    c = new SKHCEntities();
    CollectionViewSource cnh = ((CollectionViewSource)(this.FindResource("cnh"))) ;
    ObjectQuery<systemc.nh> cnhQuery = c.nhs;
    Action action = delegate
    {
    cnh.Source = cnhQuery.Execute(MergeOption.AppendOnly);
    };
    cnh.Dispatcher.Invoke(DispatcherPriority.Normal, action);
    //Cskh.Dispose();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
    a.SaveChanges();
    b.SaveChanges();
    c.SaveChanges();
    }

  4. #4

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    وقتی شما از BackgroundWorker استفاده میکنید هر کدی که در ProgressChanged بنویسید به صورت Thread Safe است و میتوانید خصوصیات یک کنترل دیگه رو تغییر بدید.
    فقط دیگه دست شما نیست که کی اون رویداد فراخونی میشه. ویندوز کنترلش می کنه . که چیز بدی نیست البته.

    اگر قصد دارید به صورت دستی تغییر رو انجام بدید و نخ طراحی کنید. باید یک Deglegate بسازید و با مدیریت Invoke اینکارو انجام بدید. یکمی کد نویسی داره ولی زیاد سخت نیست.

  5. #5
    کاربر دائمی آواتار aghayex
    تاریخ عضویت
    دی 1388
    محل زندگی
    https://telegram.me/Sed_kazem18
    پست
    924

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    وقتی شما از BackgroundWorker استفاده میکنید هر کدی که در ProgressChanged بنویسید به صورت Thread Safe است و میتوانید خصوصیات یک کنترل دیگه رو تغییر بدید.
    مثالهایی که در مورد BackgroundWorker بود فقط اومده یه متغیر رو از تابع dowork پاس داده و در رویداد ProgressChanged به شی نصبتش می دی اما تو کدهای من یه تیبل هست
    اگر قصد دارید به صورت دستی تغییر رو انجام بدید و نخ طراحی کنید. باید یک Deglegate بسازید و با مدیریت Invoke اینکارو انجام بدید. یکمی کد نویسی داره ولی زیاد سخت نیست.
    مثالهایی هم که در مورد ترد بود همونی هست که در کدهای پست اول دادم ولی مشکلی که کدهای من داره اینه که برنامه تا زمانی که اطلاعات نمایش داده می شن برنامه قفله یعنی در عمل ترد بی معنی هست

  6. #6

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    قفله یعنی Lock میکنید تا کاربر نتونه کاری بکنه !؟
    باز هم بهتر از اینه که Not responding باشه
    در ضمن اگر در BackgroundWorker کار کنید میتونید یک progressbar داشته باشید و با کمک اون پیشرفت کارو نشون بدید که خیلی برنامه بهتر میشه و حرفه ای تر.

    لازم نیست تغیرات گرید رو رکورد به رکورد نشون بدید، برنامه خیلی کند میشه

    مثالهایی که در مورد BackgroundWorker بود فقط اومده یه متغیر رو از تابع dowork پاس داده و در رویداد ProgressChanged به شی نصبتش می دی اما تو کدهای من یه تیبل هست
    مشکل شما با تیبل چیست !؟
    آخرین ویرایش به وسیله hakim22 : دوشنبه 21 فروردین 1391 در 15:19 عصر

  7. #7
    کاربر دائمی آواتار aghayex
    تاریخ عضویت
    دی 1388
    محل زندگی
    https://telegram.me/Sed_kazem18
    پست
    924

    نقل قول: دسترسی به اشیا فرم در یک thread یا BackgroundWorker

    قفله یعنی Lock میکنید تا کاربر نتونه کاری بکنه !؟
    باز هم بهتر از اینه که Not responding باشه
    در ضمن اگر در BackgroundWorker کار کنید میتونید یک progressbar داشته باشید و با کمک اون پیشرفت کارو نشون بدید که خیلی برنامه بهتر میشه و حرفه ای تر.

    لازم نیست تغیرات گرید رو رکورد به رکورد نشون بدید، برنامه خیلی کند میشه

    مثالهایی که در مورد BackgroundWorker بود فقط اومده یه متغیر رو از تابع dowork پاس داده و در رویداد ProgressChanged به شی نصبتش می دی اما تو کدهای من یه تیبل هست


    مشکل شما با تیبل چیست !؟
    ممنون که در این بحث شرکت کردی اما جوابهای شما بیشتر سوال بود تا ارائه ی راهکار
    و سوال و هم کدها مطلب منو به طور کامل رسونده و جای سوالی نموده نمی دونم شما چرا اینقدر سوال رو می پیچونی .
    از دوستانی که در این مورد کار کردن این درخواستو دارم که منو در عیب یابی این مشکل کمک کنن

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

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