
Invalidate() מבקש ממערכת ההפעלה לצייר את הפאנל מחדש בזמן שנוח לה. הציור לא מתרחש מיד.e.Graphics כבר קיים, ואין צורך ליצור ערוץ ציור חדש.הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 15» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז נשאלתי שאלה לגבי invalidate. מה זה בעצם invalidate? מה קורה כשאנחנו קוראים ל invalidate? מה המטרה של invalidate? אז התשובה היא שכשאני קורא מתוך הקוד שלי ל invalidate, מה בעצם אני אומר?
אני בעצם פונה למערכת ההפעלה, אני קורא ל invalidate, אני בעצם אומר למערכת ההפעלה, בזמנך, כשאת מרגישה לנכון, אז תפעיל לי את האירוע Paint של פאנל אחד.
אני אומר לפאנל אחד, בואו נגיד את זה שוב, אני אומר לפאנל אחד Invalidate. אתה לא מעודכן. אז מה בעצם יקרה? מה שיקרה זה שמערכת ההפעלה תפעיל את אירוע Paint של פאנל אחד שהיא תראה לנכון.
זאת אומרת זה לא יהיה מיידי, זה לא שמיד עכשיו אנחנו נצייר, מתישהו זה יצויר מה הרעיון הרעיון הוא שמערכת ההפעלה שהראינו שציור זו פעולה כבדה ומערכת ההפעלה רוצה לעשות הכל לפני שהיא מנסה לצייר כי אם היא קודם תצייר אז ייקח הרבה זמן ורק אז היא תעשה דברים אחרים אז יכול להיות שהדברים
האחרים יותר דחופים והם יתעכבו עבור המשתמש נגיד ואז המשתמש יגיד התוכנה הזו עובדת נורא לאט Windows עובדת נורא לאט הרעיון הוא שכשאנחנו עושים פעולה אז התגובה היא מיידית והציור זה משהו שיקרה ברקע אחד מהדברים ש-invalidate עושה זה שהיא אוגרת בוא נגיד שאני קורא במהלך הפקות שאני קורא ל-invalidate ועושה משהו ושוב קורא
ל-invalidate ועושה עוד משהו ושוב קורא ל-invalidate כל עוד אני עושה עוד ועוד ועוד דברים אז המערכת ההפעלה רואה שהתוכנה עסוקה אז היא עדיין לא מודיעה לה לצייר את עצמה מחדש.
רק אחרי שסיימתי לעשות את כל הדברים רק אז מערכת ההפעלה מודיעה לתוכנית לצייר את עצמה מחדש. בוא נגיד שאני בעצמי אני מצטער שאין לי הסבר יותר טוב אבל כרגע ככה אנחנו מציירים אני מניח לא בדקתי את זה אני מניח שאפשר לקרוא ישר מפה לפונקציה שמציירת תכף אני אסביר זאת אומרת הייתי רוצה
אפילו שתנסו מפה ללקרוא לפונקציה pain יש פה יש אירוע סליחה זה לא בדיוק פונקציה זה event handler אבל אה הנה אני מבין אני קצת מבין את הבעיה למה אנחנו בדווקא אוקיי מה שאנחנו אומרים זה שאוקיי אני קורא ל invalidate אני לא צריך להקצות graphics וכשאני קורא ל invalidate אז בסופו של דבר paint מופעלת ולpaint כבר e מועברת ולe כבר יש את
graphics ואז לא צריך להקצות graphics חדש כן זה זה נחמד אבל הרעיון הוא הרבה יותר לדעתי הוא הרבה יותר חזק מזה. אנחנו קוראים ל-invalidate, אנחנו אבל לא מנצלים את הפוטנציאל האמיתי שלה. ב-invalidate, נעשה קונטרול שיפט רווח, יכול לקרוא ל-invalidate עם כל מיני אפשרויות, ואחת מהן היא זה עם רקטנגל.
בוא נראה עוד איזה אפשרויות, אפשר גם עם ריג'ן, שזה כמה רקטנגלים. הבנתי, יפה. אז בוא נגיד שלקרוא ל-invalidate עם רקטנגל, או לקרוא לה עם ריג'ן, שזה כמה רקטנגלים, זה כבר יותר עוצמתי.
זאת אומרת יכול להיות שאנחנו מחליטים בסדר בוא נגיד אלה נושאים קצת מתקדמים שאני לא נכנס אליהם לא ניכנס אליהם במסגרת הסדרת הרצאות הזאת מה שהייתי רוצה שתנסו לעשות זה להגדיר פונקציה איפה פיינט שלנו להגדיר פונקציה שמציירת תקראו לה פיינט שזה הקוד שיש בתוכה כמובן שאתם לא תוכלו להשתמש באי גרפיקס אתם תצטרכו להקצות גרף x חדש אבל אתם תוכלו לקרוא לפונקציה הזו
במקום לקרוא ל invalidate ותראו אז איך המערכת מתנהגת וזו שיטה אחת לעבוד אבל זו שיטה לא נכונה היא לא סטנדרטית אני לא יודע איזה תוצאות יהיו לזה אני מאוד אשמח אם תספרו לי אבל זו שיטה אחת השיטה שלנו אנחנו אומרים אנחנו נגיד למערכת ההפעלה את