Invoke ב Event

Sea Bass

New member
Invoke ב Event

היי,
אודה לכם על עזרה קטנה.
יש לי מחלקה ובה Event שנניח נקרא לו MyEvent.
כשאני רוצה "להרים" את ה Event הזה, אז אני שואל אם הוא NULL ואם לא אז אני מבצע:
;(MyEvent(5
נניח שאני מעביר למתודות הרשומות את הערך 5 סתם לדוגמא.
השאלה שלי היא שאני יכול לבצע את זה בגם בצורה הזאת:
;(MyEvent.(Invoke
איפה אני צריך להמתמש בצורה הראשונה ואיפה בשניה? מהו ההבדל פה? האם זה קשור לתרדים?
עוד שאלה קטנה (אני יכול לבדוק את זה בקלות אבל בכל זאת) -
כאשר אני מרים את ה Event - האם הטרד נתקע עד שכל ה SubScribers מסיימים את העבודה באותה מתודה או שזה ממשיך?
אשמח טיפה להבין מה קורה בתהליך הזה.
תודה רבה.
 
קצת סדר.

1. לטעמי אין שום סיבה כרגע לעבוד עם Begin\End invoke. המשך ההודעה הוא להשכלה בלבד - מציע פשוט לא להשתמש בקוד הזה.
2. הצורה הראשונה MyEvent(5) z מתבצעת כולה ב-thread שהרים את האיוונט. סינכרוני לחלוטין - ומומלץ לשימוש.
3. הצורה השנייה MyEvent.Invoke שקולה *לחלוטין* לראשונה. תשתמש בראשונה - יותר קצר, יותר סטנדרטי.

4. BeginInvoke -
* המתודה שרשומה לאיוונט מתבצעת ב-threadpool thread. הקוד שלך ממשיך לרוץ במקביל.
* ה-callback שמועבר בקריאה, נקרא כשהמתודה יוצאת - באותו thread של המתודה.
* EndInvoke חוסם את ה-thread המקורי שלך, עד שהמתודה הרשומה לאיוונט יוצאת - *אבל לא עד יציאת ה-callback שהעברת הקריאה*.

אני מקווה שהמידע לעיל מדוייק - כאמור, אני לעולם לא משתמש ב-flow העקום הזה. זה מיותר, וגם מזיק.
 
למעלה