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

نام تاپیک: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

  1. #1

    Question تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    سلام، اشکال این کدها چیه چرا Theredها با هم تداخل میکنن؟! من می خوام در واقع هر وقت کاراکتری توی تکست باکس زده شد و در همین هنگامی که داده ها دارن واکشی میشن فقط یک circularProgress بچرخه و زمانی که کار BackGroundWorker تمام شد توی رویداد RunWorkerCompleted اون circularProgress دیگه نمایش داده نشه ولی ظاهرا گیر میده که تداخل میکنه با ترد قبلی !! کد های چک کردن هم گذاشتم ولی نمی دونم مشکل از کجاست؟
    البته این کار رو با تایمر شبیه سازی کردم ولی می خوام دقیق انجام بشه ممنون.

        private void backgroundWorkerSe_DoWork(object sender, DoWorkEventArgs e)
    {
    if (backgroundWorkerSe.CancellationPending)
    {
    e.Cancel = true;
    Return;
    }
    else
    {
    SearchWords("select En_Text,Per_Text,Per_Means,Type from Words where En_Text like @En_Text order by En_Text asc ");

    circularProgress1.Invoke(new Action(() =>
    {
    circularProgress1.IsRunning = true;
    }));

    }
    }


    private void radTextBoxSearch_TextChanged(object sender, EventArgs e)
    {
    if (!backgroundWorkerSe.IsBusy)
    {
    backgroundWorkerSe.RunWorkerAsync();
    }
    else
    {
    backgroundWorkerSe.CancelAsync();
    }

    }

      private void backgroundWorkerSe_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    circularProgress1.Invoke(new Action(() =>
    {
    circularProgress1.IsRunning = false;
    }));
    }


      public void SearchWords(string strcm)
    {
    try
    {
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\Users\Daniyal\Documents\Visual Studio 2013\Projects\Dani_ProDic\Dani_ProDic\Dic.mdb");
    OleDbDataAdapter da = new OleDbDataAdapter(strcm, con);
    da.SelectCommand.Parameters.AddWithValue("@En_Text ", radTextBoxSearch.Text + "%");
    DataTable dt = new DataTable();
    da.Fill(dt);
    radGridViewWords.DataSource = dt;
    radGridViewWords.Columns[0].HeaderText = "کلمه";
    radGridViewWords.Columns[1].HeaderText = "معنی";
    radGridViewWords.Columns[2].IsVisible = false;
    radGridViewWords.Columns[3].IsVisible = false;
    textBoxTotalMeans.Text = radGridViewWords.CurrentRow.Cells[2].Value.ToString();

    }
    catch (Exception e)
    {
    MessageBox.Show(e.Message);
    }

    }
    آخرین ویرایش به وسیله daniyaltjm : شنبه 24 مهر 1395 در 18:36 عصر

  2. #2

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    رویداد DoWork در ترد دیگر اجرا میشه و نمی توان به کنترلها دسترسی مستقیم داشت.
    دو راه دارید یا در متد SearchWorks از طریق Invoke مقدار کنترلها رو تغییر بدید یا اینکه دستکاری کنترلها رو به رویداد RunWorkerCompleted منتقل کنید.

  3. #3

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    رویداد DoWork در ترد دیگر اجرا میشه و نمی توان به کنترلها دسترسی مستقیم داشت.
    دو راه دارید یا در متد SearchWorks از طریق Invoke مقدار کنترلها رو تغییر بدید یا اینکه دستکاری کنترلها رو به رویداد RunWorkerCompleted منتقل کنید.
    ممنون، خوب من بالا از Invoke استفاده کردم ولی با متد Action چرا جواب نمیده؟ میشه یکم توضیح با کد بیدن؟ بعد اگر توی رویداد RunWorkerCompleted کنترولمو نشون بدم یکم ناجور نیست؟ آخه رکورد ها واکشی شدن و بعد اون circularProgress1 بچرخه!

  4. #4

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    همه کدهای مربوط به لود رکورد از دیتا بیس و غیر فعال کردن کنترول circularProgress رو بردم توی رویداد RunWorkerCompleted و توی رویداد DoWork هیچی ننوشتم و فقط توی رویداد تکست چینج نوشتم
     circularProgress1.IsRunning = true;
    if (!backgroundWorkerSe.IsBusy)
    backgroundWorkerSe.RunWorkerAsync();

    و بدون مشکل کار کرد.

  5. #5
    مدیر بخش آواتار ژیار رحیمی
    تاریخ عضویت
    مهر 1386
    محل زندگی
    تهران
    پست
    1,095

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    شما Invoke رو برای circularProgress1 فراخوانی کردی در صورتی که شما داخل متد SearchWord داری به کنترل هایی که در Thread اصلی ساخته شده تغییرات رو اعمال میکنی

    public void SearchWords(string strcm)
    {
    try
    {
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=C:\Users\Daniyal\Documents\Visual Studio 2013\Projects\Dani_ProDic\Dani_ProDic\Dic.mdb");
    OleDbDataAdapter da = new OleDbDataAdapter(strcm, con);
    da.SelectCommand.Parameters.AddWithValue("@En_Text ", radTextBoxSearch.Text + "%");
    DataTable dt = new DataTable();
    da.Fill(dt);
    Invoke((MethodInvoker) delegate
    {
    radGridViewWords.DataSource = dt;
    radGridViewWords.Columns[0].HeaderText = "کلمه";
    radGridViewWords.Columns[1].HeaderText = "معنی";
    radGridViewWords.Columns[2].IsVisible = false;
    radGridViewWords.Columns[3].IsVisible = false;
    textBoxTotalMeans.Text = radGridViewWords.CurrentRow.Cells[2].Value.ToString();
    });

    }
    catch (Exception e)
    {
    MessageBox.Show(e.Message);
    }

    }
    First,solve the problem then write the code

  6. #6

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    نقل قول نوشته شده توسط daniyaltjm مشاهده تاپیک
    همه کدهای مربوط به لود رکورد از دیتا بیس و غیر فعال کردن کنترول circularProgress رو بردم توی رویداد RunWorkerCompleted و توی رویداد DoWork هیچی ننوشتم و فقط توی رویداد تکست چینج نوشتم
     circularProgress1.IsRunning = true;
    if (!backgroundWorkerSe.IsBusy)
    backgroundWorkerSe.RunWorkerAsync();

    و بدون مشکل کار کرد.
    یعنی اصلا هیچی توی متد DoWork ننوشتید؟!!! خب در اینصورت اصلا backgroundworker چه استفاده ای داره؟

  7. #7

    نقل قول: تداخل در واکشی اطلاعات از database در رویداد TextChanged با استفاده از BackGroundWorker

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    یعنی اصلا هیچی توی متد DoWork ننوشتید؟!!! خب در اینصورت اصلا backgroundworker چه استفاده ای داره؟
    آره درسته هیچ استفاده ای از قابلیت تررد نکردم فقط باهاش نحوه نمایش circularProgress رو کنترول کردم ولی با نکته ای که آقای ژیار گفتن و کدی که نوشتن حتما مشکل حل باید بشه

تاپیک های مشابه

  1. پاسخ: 1
    آخرین پست: یک شنبه 12 شهریور 1391, 17:18 عصر
  2. پاسخ: 0
    آخرین پست: یک شنبه 12 شهریور 1391, 16:41 عصر
  3. سوال: کمک فوری در مورد واکشی اطلاعات از دو جدول
    نوشته شده توسط oranoos در بخش VB.NET
    پاسخ: 2
    آخرین پست: یک شنبه 24 اردیبهشت 1391, 13:10 عصر
  4. مشکل در واکشی اطلاعات از sql
    نوشته شده توسط sara_aryanfar در بخش C#‎‎
    پاسخ: 4
    آخرین پست: دوشنبه 04 مهر 1390, 15:18 عصر
  5. مشکل در واکشی اطلاعات از جدول
    نوشته شده توسط maryam82 در بخش VB.NET
    پاسخ: 1
    آخرین پست: یک شنبه 30 تیر 1387, 20:36 عصر

برچسب های این تاپیک

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

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