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

نام تاپیک: خطا در هنگام استفاده از Thread

  1. #1
    کاربر دائمی آواتار morteza271
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد
    پست
    1,723

    خطا در هنگام استفاده از Thread

    سلام دوستان.

    یه مشکلی دارم که بدجوری وقتم رو گرفته و اعصابم رو ...

    داستان از این قراره که :

    من یه تابع به اسم CreateNumber دارم که این تابع کارش اینه که عدد های بین دو عدد رو ایجاد میکنه.این دو عدد رو هم از داخل تکست باکس های داخل فرم میخونه.
    مثلا بین دو عدد 10 و 15 عددهای 11و12و13و14و15 رو در دخل یه TreeView مینویسه :
    کد اصلی این تابع :

    int Number = FromNumber;
    for (long i = FromNumber; i <= ToNumber; i++)
    {
    Number++;
    tvNumberList.Nodes.Add("0" + Number.ToString());

    Counter++;
    radprog_value = (float)Counter / (float)Total;
    radprog_value = radprog_value * 100;
    }

    و من میخوام همزمان با این کار یه پروگرس بار هم پر بشه.
    که برای این کار با استفاده از ترد ها اینطوری کد نوشتم :
    t1 = new Thread(new ThreadStart(CreateNumber));
    t1.Start();


    برای پر شدن پروگرش بار هم یه تایمر گذاشتم که مقدار Value پروگرس بار رو برابر radprog_value میکنه.

    اما مشکل اونجاست که در داخل تابع به خط
    tvNumberList.Nodes.Add("0" + Number.ToString());

    گیر میده و خطای زیر رو میده :
    Action being performed on this control is being called from the wrong thread. Marshal to the correct thread using Control.Invoke or Control.BeginInvoke to perform this action.


    دوستان لطف کنن بهم کمک کنن.
    با تشکر

  2. #2
    کاربر دائمی آواتار hi level hdd
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    حکیمیه
    پست
    165

    نقل قول: خطا در هنگام استفاده از Thread

    با سلام
    این مشکل به خاطر استفاده از thread هستش .هم میتونی از delegate استفاده کنی یا ساده ترش اینه که بری تو پوشه برنامت و فایل exe رو مستقیم
    اجرا کنی و نه از طریق ویژوال استدیو

  3. #3
    کاربر دائمی آواتار hi level hdd
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    حکیمیه
    پست
    165

    نقل قول: خطا در هنگام استفاده از Thread

    با سلام
    این مشکل به خاطر استفاده از thread هستش .هم میتونی از delegate استفاده کنی یا ساده ترش اینه که بری تو پوشه برنامت و فایل exe رو مستقیم
    اجرا کنی و نه از طریق ویژوال استدیو

  4. #4

    نقل قول: خطا در هنگام استفاده از Thread

    سلام؛ خطا به این دلیل است که شما می خواهید به روش های معمول، از داخل Thread به اجزای یک Thread دیگر (تردی که کنترل مربوطه روی آن قرار داره) دسترسی پیدا کنید که این باعث بروز خطا می شود.
    خب شما برای اینکه بتونید کنترل مورد نظرتون رو از طریق یک Thread دیگر آپدیت کنید، باید کنترل رو Invoke کنید! با اینکار یک delegate روی ترد کنترل اجرا میشه و از این طریق می تونید به کنترل دسترسی داشته باشید.

    کد شما باید به این صورت اصلاح بشه:

    tvNumberList.Invoke((MethodInvoker)delegate()
    {
    tvNumberList.Nodes.Add("0" + Number.ToString());

    });


    البته من نمی دونم که ساختار برنامه شما به جه صورت می باشد.شاید نیاز به تغییرات بیشتری داشته باشه.
    آخرین ویرایش به وسیله ali.rezaei7 : سه شنبه 06 اردیبهشت 1390 در 17:30 عصر

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

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