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

نام تاپیک: اجرای همزمان دو event

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1391
    پست
    96

    اجرای همزمان دو event

    چطور توسطdelegateدو event را همزمان اجرا کنم
    ممنون از دوستان

  2. #2

    نقل قول: سوال:اجرای همزمان دو event

    سلام

    سوال شما مربوط به ترکیب Delegate ها میشه (Multicast Delegates):


    delegate void Del(string s);
    class TestClass
    {
    static void Hello(string s)
    {
    System.Console.WriteLine(" Hello, {0}!", s);
    }
    static void Goodbye(string s)
    {
    System.Console.WriteLine(" Goodbye, {0}!", s);
    }
    static void Main()
    {
    Del a, b, c, d;
    // Create the delegate object a that references
    // the method Hello:
    a = Hello;
    // Create the delegate object b that references
    // the method Goodbye:
    b = Goodbye;
    // The two delegates, a and b, are composed to form c:
    c = a + b;
    // Remove a from the composed delegate, leaving d,
    // which calls only the method Goodbye:
    d = c - a;
    System.Console.WriteLine("Invoking delegate a:");
    a("A");
    System.Console.WriteLine("Invoking delegate b:");
    b("B");
    System.Console.WriteLine("Invoking delegate c:");
    c("C");
    System.Console.WriteLine("Invoking delegate d:");
    d("D");
    }
    }
    Output

    Invoking delegate a:
    Hello, A!
    Invoking delegate b:
    Goodbye, B!
    Invoking delegate c:
    Hello, C!
    Goodbye, C!
    Invoking delegate d:
    Goodbye, D!


  3. #3
    کاربر دائمی آواتار vof.ir
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    تهران
    پست
    249

    نقل قول: سوال:اجرای همزمان دو event

    هم زمان که ؛ به صورت صد در صد همزمان نیست قطعا یک ترتیب اجرایی دارند
    شما دو متد مربوطه را به دلیگیت اضافه کرده اید؟

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

    نقل قول: سوال:اجرای همزمان دو event

    به نام تنها برنامه نویس هستی
    سلام ,

    برای اجرای هم زمان چند پروسه می تونید از Thread استفاده کنید.

  5. #5
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    44
    پست
    1,046

    نقل قول: سوال:اجرای همزمان دو event

    سلام
    نقل قول نوشته شده توسط Raha323 مشاهده تاپیک
    چطور توسطdelegateدو event را همزمان اجرا کنم...
    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک
    سوال شما مربوط به ترکیب Delegate ها میشه (Multicast Delegates): ...
    نقل قول نوشته شده توسط ahmadreza517 مشاهده تاپیک
    برای اجرای هم زمان چند پروسه می تونید از Thread استفاده کنید.
    خواهشاً دوستان شاکی نشن، با احترام فراوان و عذرخواهی از اینکه جواب میدم! مگه با Delegate ا Event اجرا میکنن! یعنی چی؟ من روی سوال رو نمی‌تونم بفهمم :(
    یک ربع هست دارم به روی سوال توجه می‌کنم، ولی هیچکدوم از برداشت های شما رو نمی‌تونم بکنم!

    آخه نمونه کد شما چه ربطی داره به MulticastDelegate؟ باور کنید متوجه نمیشم که می‌پرسم، MulticastDelegate یه چیز دیگه است (به مثال انتهای لینک توجه کنید). این کلاس غیر قابل انشعاب، درون خودش یک لیست پیوندی داره که بهش میگن invocation list و حاوی لیستی از delegate های شما هست و به ترتیبی که شما لیست تون رو بهش اضافه کردین، اون delegate ها رو فراخوانی میکنه و اصلاً شبیه چیزی نیست که شما نوشتین! این کدتون رو یکبار با دقت نگاه کنید؟ event ها کو؟ اونا که مستقیم صدا کردین چه ربطی به event دارن و ...
    __________
    اگه منظور اینه که چند تا Event Handler از نوع Delegate‌ تون ایجاد کنید، که محدودیتی تو اینکار نیست (می‌تونید Delegate رو عین یه کلاس درنظر بگیرید که هرچند تا خواستید میشه ازش هندلر ساخت)؛ برای هر Event می‌تونید یه EventHandler تعریف کنید:
    public delegate void MyEventHandler(object sender, StartEventArgs e);
    ...
    public class Sender {
    public event MyEventHandler BeforeStart;
    public event MyEventHandler Handler_1;
    //...
    public event MyEventHandler Handler_n;
    public event MyEventHandler AfterStart;
    //...
    }

    و همونطورکه دوستمون اشاره کردن:
    نقل قول نوشته شده توسط vof.ir مشاهده تاپیک
    هم زمان که ؛ به صورت صد در صد همزمان نیست قطعا یک ترتیب اجرایی دارند
    شما دو متد مربوطه را به دلیگیت اضافه کرده اید؟
    اصلاً نیم درصد هم همزمان نیستن! حتی در MulticastDelegate هم هر چند Synchronous ولی بازم ترتیبی اجرا میشن، در هر حال مشکل اینه که همزمانی اینا رو چطور میخواید مدیریت کنید؟ مثلاً اگه فلان Event‌ اجرا نشده باشه، این‌یکی invoke نشه یا اگه Exception ای تو روند فراخوانی Event ها رخ بده، چطور می‌خواهید مدیریت کنید (چون تمام event های بعد اون هم دیگه از بین میرن) و ...

  6. #6

    نقل قول: اجرای همزمان دو event

    آخه نمونه کد شما چه ربطی داره به MulticastDelegate؟
    اگه منظورتون نمونه کد من هست که اگه ربطی نداشت که مایکروسافت اون رو به عنوان مثال برای درک مفهوم Multicast در سایت خودش قرار نمی داد!

    اجرای همزمان یک چیز هست و اجرای پشت سر هم یک چیز دیگه.
    برای اجرای پشت سرهم می توان از پیوند Delegate ها استفاده کرد.
    برای اجرای همزمان باید از کلاس های مربوط به اجرای همزمان مثل Thread یا Task استفاده کرد.

    مگه با Delegate ا Event اجرا میکنن! یعنی چی؟
    بله با delegate رویداد اجرا می کنند می تونید به کد Designer فرم که اتوماتیک ساخته میشه نگاهی بیندازید. مثلاً با دابل کلیک روی فرم که رویداد Load رو میاره یک متغیر از نوع delegate در Designer اضافه میشه.


    MulticastDelegate یه چیز دیگه است
    شما بگید MultiCast چیست؟

    این کدتون رو یکبار با دقت نگاه کنید؟ event ها کو؟ اونا که مستقیم صدا کردین چه ربطی به event دارن و ..
    به جای متد های تعیین شده می تونیم event قرار بدیم فرقی نمی کنه!

  7. #7
    کاربر دائمی آواتار Saeed_m_Farid
    تاریخ عضویت
    تیر 1386
    محل زندگی
    فضای تهی میان دیوارها
    سن
    44
    پست
    1,046

    نقل قول: اجرای همزمان دو event

    فقط محض اطلاع، قصد دیگه ای ندارم:
    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک

    1. اگه ربطی نداشت که مایکروسافت اون رو به عنوان مثال برای درک مفهوم Multicast در سایت خودش قرار نمی داد!
    2. اجرای همزمان یک چیز هست و اجرای پشت سر هم یک چیز دیگه. برای اجرای پشت سرهم می توان از پیوند Delegate ها استفاده کرد.
    3. برای اجرای همزمان باید از کلاس های مربوط به اجرای همزمان مثل Thread یا Task استفاده کرد.
    4. با delegate رویداد اجرا می کنند می تونید به کد Designer فرم که اتوماتیک ساخته میشه نگاهی بیندازید. مثلاً با دابل کلیک روی فرم که رویداد Load رو میاره یک متغیر از نوع delegate در Designer اضافه میشه.
    5. شما بگید MultiCast چیست؟
    6. به جای متد های تعیین شده می تونیم event قرار بدیم فرقی نمی کنه!
    1. خیلی خوب گفتین: "برای درک مفهوم Multicast"؛مشکل در اینجا ارتباط Multicast Delegate با چندین event هست، که من سعی کردم اون رو تشریح کنم؛ ضمناً من ارتباط کد شما با کلاس MulticastDelegate رو عرض کردم، نه درک مفهوم Multicast؛ من فکر کردم شما یک شیء از این کلاس می خواهید تعریف کنید، اگه اشتباه کردم عذر میخوام.
    2. کاملاً درست هست، مگه من چیزی خلاف این فرمایش شما گفتم؟ ولی هیچ کاری در این مثال MSDN (کد شما) برای برآورده کردن این کار (اجرای همزمان) صورت نگرفته! یعنی کاری که این کد هم میکنه "اجرای پشت سر هم" هست، خوب بنظرم کار خاصی تو این مثال صورت نگرفته، فقط کاربرد عملگرها + و - که بقول خودتون یکنفر یکبار به کد Designer نگاه کنه، اولین چیزی که می بینه همین هست.
    3. خوب دقیقاً سوال مربوط میشه به این قسمت! اگه صورت مساله این هست، پاسخ هم باید در این مورد باشه نه پیوند Delegate ها و ... (Subscribe and Unsubscribe)
    4. نه دیگه، اینطوری نیست! اینکه تو Designer اتوماتیک به ازاء هر EventHandler یک نسخه از Delegate عمومی (نمونه delegate از System.EventHandler.EventHandler) درست میشه دلیل بر نادرستی این برداشت شما هست؛ Delegate رو شما می تونین مثل یه کلاس تصور کنید که اشیائی که از اون ساخته میشن، کار موردنظر رو انجام میدن؛ مثلاً EventHandler هایی که از یک کلاس Delegate ساخته میشن، مسئول مدیریت رویدادهایی هستن که باید Implement بشن؛ اون فقط یه چیزی مثل Function pointer هست، یه کلاس که زحمت همه کارهاش رو دات نت کشیده...
    5. بازم میگم همونطورکه توضیح دادم، قصدم کلاس MulticastDelegate بوده و فکر نمیکنم کسی که چنین سوالی رو میپرسه ندونه Multicast یعنی ارسال پیغام (اطلاعات) با هم (simultaneously) به گروهی از گیرنده‌های مقصد!
    6. به جای متدهای تعیین شده event قرار بدیم، میشه Event Handling؟ پس EventArgs ، event invocation، Raise و ... چی میشه؟ همه این کارها رو هم بکنیم (از روی یه Tutorial ساده)، بازم روی مساله یه چیز دیگه بود!

    +=+=+=+=+=+=+=+=+=+=+=+=

    اگه منظور دوست ما اجرای Asynchronous بقول استادمون تورج خان Multicast Delegate هست، بعد اینکه شما EventHandler هاتو رو درست کردین و به شیء موردنظرتون انتساب دادن (مثلاً multicast) باید از متدهای BeginInvoke و EndInvoke استفاده کنید و برای بدست آوردن لیست EventHandlerهای اضافه شده هم از GetInvocationList، مثلاً چیزی مثل کد زیر:
    foreach (MyDelegate action in multicast.GetInvocationList())
    {
    action.BeginInvoke(...);
    }

    همونطورکه قبلاً هم گفتم، من دقیقاً صورتِ سوال شما رو نگرفتم و نفهمیدم مشکل تون کجا بود؟ اگه در اجرای همزمان مشکل دارید، این رو بخونید: Calling Synchronous Methods Asynchronously
    اگه هم نه که باید دقیق تر (فنی تر) بگین مشکل چیه؟
    ________________
    دوستان عزیز و محترم، من اونهمه قبل پست ام خواهش کردم ناراحت نشیم، منظور بدی ندارم و ... چرا در مقابل هم گارد می گیریم؟ تو محیط علمی همه با هم با گوشزد کردن اشتباهات یا یادآوری مطالب فراموش شده به هم هست که پیشرفت میکنیم؛ شما اشتباه من رو میگین، من قبول میکنم . بالعکس؛ چرا باید ناراحت بشیم؟ مگه من اشتباه کردم معذرت نخواستم، اینطوری آدم میترسه هیچ پستی برنه یا اشتباهی (درست یا غلط) رو گوشزد کنه که مبادا کسی ناراحت بشه! خوب پس اصلاً واسه چی اومدیم این فروم، سرمون رو میکردیم تو کتابها و گوگل و ... ولی مزیت اینجا به همین هست که اگه اشتباه میکنیم بهمون بگن تا سریعتر پیشرفت کنیم...
    بازم اگه من جایی اشتباه کردم بهم بگین تا تصحیح کنم.
    آخرین ویرایش به وسیله Saeed_m_Farid : دوشنبه 12 تیر 1391 در 16:05 عصر دلیل: دوستانه

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

  1. اجرای همزمان دو دستور
    نوشته شده توسط maryam_jamshid در بخش SQL Server
    پاسخ: 7
    آخرین پست: یک شنبه 13 آبان 1386, 07:44 صبح
  2. چگونگی اجرای همزمان یک Query
    نوشته شده توسط probit در بخش SQL Server
    پاسخ: 1
    آخرین پست: دوشنبه 30 مهر 1386, 20:11 عصر
  3. اجرای همزمان دو تابع
    نوشته شده توسط amir_civil در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 4
    آخرین پست: پنج شنبه 11 مرداد 1386, 11:54 صبح
  4. جلوگیری از اجرای همزمان یک برنامه
    نوشته شده توسط SReza1 در بخش برنامه نویسی در Delphi
    پاسخ: 7
    آخرین پست: یک شنبه 18 آبان 1382, 08:57 صبح

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

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