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

نام تاپیک: اجرای تابع با پارامتر به صورت یک Thread.

  1. #1
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727

    اجرای تابع با پارامتر به صورت یک Thread.

    سلام
    چطوری میشه یه تابع رو که دارای پارامتر ورودی هست رو به صورت یک Thread اجرا کرد ؟؟ راه دیگه ای هم اگه به ذهن دوستان میرسه لطفا بگین،مرسی

  2. #2
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    دوست عزیز تا انجا که می دانم در theard ها تابع می تواند یک پارامتر ان هم از نوع object داشته باشد مانند کد زیر

    private void Form1_Load(object sender, EventArgs e)
    {
    System.Threading.Thread t = new System.Threading.Thread(theard);

    }
    void theard(object a) { }

    اگر شما بیش از یک پارمتر می خواهید من از این روش استفاده می کنم یک arraylist را به ان تابع پاس می کنم

  3. #3
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    خب الان شما توی کدی که نوشتی چطور ابجکت a رو به تابعت پاس میکنی ؟

  4. #4
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    کسی نیست ؟

  5. #5

  6. #6
    کاربر دائمی آواتار habedijoo
    تاریخ عضویت
    اردیبهشت 1384
    محل زندگی
    تهران
    پست
    538
    سعی کن از کنترل BackGroundWorker استفاده کنی . یه کنترله آماده برای کار با رشته ها .

  7. #7
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    بابا نمیشه ... شما یه متد تعریف کنید که یه پارامتر بگیره، بعد توی شی ThreadStart ای که ساختید این تابع رو بهش پاس کنید(البته با پارامترش)، ببینید Error میگیره .. اگه تونستید این کار رو انجام بدید، کدشو اینجا بذارید،با Backgroundworker هم کار کردم ولی اون چیزی که میخوام نیست، ببینید من با یه Thread میخوام یه فرم Loading با ارسال پارامتری از نوع String رو به کاربر نشون بدم(ShowDialog()) بعد یه سری عملیات انجام بشه، بعد Thread مورد نظر Abort بشه، این کار با Thread فقط با متدهایی میشه که از نوع Void باشه و پارامتر هم نداشته باشه، متد من Void هست ولی یه پارامتر میگیره، مشکلم اینه. مرسی

  8. #8

  9. #9
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    خداخیرتون بده .. من منتظرم

  10. #10
    کاربر دائمی آواتار ghafoori
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان-نجف اباد
    پست
    1,111

    Smile

    من این کد را بکار بردم درست کار می کند

    private void Form1_Load(object sender, EventArgs e)
    {
    System.Threading.Thread t = new System.Threading.Thread(theard);
    t.Start(10);

    }
    int a;
    void theard(object a) {
    a = Convert.ToInt32(a);
    MessageBox.Show(a.ToString());

    }

  11. #11
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    ایول ... درست همونی بود که میخواستم ... مشکل همین تابع Start بود که نمیدونستم پارامترهای تابع رو اینجا باید بهش پاس کنم، بهر حال دستت درد نکنه، دست همه درد نکنه

  12. #12
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    بابا یه مشکل دیگه :
    من کد زیر رو به کار بردم، برنامه درست کامپایل و اجرا شد :
    System.Threading.Thread th = new System.Threading.Thread(this.ShowWaitForm);
    th.Start("در حال اضافه کردن آیتم ...");
    this.AddData();
    this.LoadData();
    th.Abort();

    ول نمیدونم الان که میخوام کامپایل کنم از تابعی که به Thread پاس کردم Error میگیره :
    Error 2 Argument '1': cannot convert from 'method group' to 'System.Threading.ThreadStart'

    البته یه Error دیگه هم میده :
    Error 3 The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.T hreadStart)' has some invalid arguments

  13. #13
    کاربر دائمی آواتار hdv212
    تاریخ عضویت
    آبان 1384
    محل زندگی
    قم
    پست
    1,727
    بچه ها مشکلم حل شد.
    در آرگومانی که به تابع ارسال میکردم، به جای String نوع Object رو جایگزین کردم مشکل حل شد ولی آخه چرا الان Error میگیرفت ؟؟ نکنه یادش رفته بوده ؟؟

  14. #14
    کاربر دائمی آواتار ARA
    تاریخ عضویت
    آبان 1383
    محل زندگی
    Bad Sector
    پست
    448

    Cool

    msdn این یک راه دیگه است
        
    Thread newThread = new Thread( new ParameterizedThreadStart(DoWork));
    newThread.Start(42);


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

  15. #15
    کاربر جدید آواتار ahmadalli
    تاریخ عضویت
    مهر 1389
    محل زندگی
    تهران
    سن
    28
    پست
    14

    نقل قول: اجرای تابع با پارامتر به صورت یک Thread.

    private void Form1_Load(object sender, EventArgs e)

    {

    System.Threading.Thread t = new System.Threading.Thread(theard);
    object o=new object();
    t.Start(o);


    }

    void theard(object a) { }

  16. #16
    کاربر جدید آواتار ahmadalli
    تاریخ عضویت
    مهر 1389
    محل زندگی
    تهران
    سن
    28
    پست
    14

    نقل قول: اجرای تابع با پارامتر به صورت یک Thread.

    کلا با نوع آبجکت کار میکنن اینا با نوع های دیگه سازگار نیستن.باید یه ذره تبدیل توی کد به کار ببرید!

  17. #17

    نقل قول: اجرای تابع با پارامتر به صورت یک Thread.

    با این روش می توانید هر تعداد پارامتر که خواستید به تابع بفرستید:

            private void Form1_Load(object sender, EventArgs e)        {
    string strFirstName = "Mohammad";
    string strLastName = "Ahmadi";


    System.Threading.Thread td = new System.Threading.Thread
    (delegate() { Function(firstName: strFirstName, lastName: strLastName); });
    td.Start();
    }




    public void Function(string firstName, string lastName)
    {
    //Do Something ...
    }
    آخرین ویرایش به وسیله mohammad3062 : یک شنبه 17 خرداد 1394 در 00:21 صبح

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

  1. پیاده سازی تایمر با استفاده از Thread
    نوشته شده توسط Ghasem Dehghani در بخش C#‎‎
    پاسخ: 18
    آخرین پست: شنبه 15 اردیبهشت 1386, 17:40 عصر
  2. ایجاد thread
    نوشته شده توسط mahtab_18 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: سه شنبه 11 اردیبهشت 1386, 09:59 صبح

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

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