פורסם 2013 ביולי 2912 שנים כשאני פותח משהו ע"י ;()showdialog אני צריך לשחרר אותו ע"י ;()dispose, או שמספיק לסגור (;()close)? ובכללי יש כל מיני דברים שאני צריך לסגור ואחרי זה לפתוח עוד פעם (כמו את האפשרות להשמיע שיר דרך התוכנה בשעון הנ"ל), ואם אני משחרר אותם ע"י ;()dispose המהדר זורק חריג שאומר שא"א לפתוח "דברים שהושלכו", מה עושים בכאלה מקרים?תודה רבה (וסליחה שאני חופר לכם עם כל השאלות).
פורסם 2013 ביולי 2912 שנים הדרך היחידה לדעת היא באמצעות התיעוד. קרא היטב את התיעוד של המתודה Form.Close, הוא בדיוק עונה לך על השאלה.אגב, למיטב ידיעתי בדרך כלל מממשים את הפונקציה Dispose ככה שאם קוראים לה על אובייקט שכבר עשו לו Dispose, היא פשוט לא עושה כלום. החריגה ObjectDisposedException בדרך כלל נזרקת רק כשאתה מנסה לגשת למתודות אחרות של האובייקט. נערך 2013 ביולי 2912 שנים על-ידי שניצל
פורסם 2013 ביולי 2912 שנים מחבר בקיצור אני צריך להשתמש בdispose.החריג נזרק כאשר אני מנסה לפתוח אותו שוב עם showdialog, ובגלל זה אני לא יכול להשתמש בdispose, אלא רק בclose (מה שבתוכנות גדולות יכול לדפוק לי את המשאבים והזיכרון). נערך 2013 ביולי 2912 שנים על-ידי eido300
פורסם 2013 באוקטובר 3112 שנים מחבר קראתי לא מזמן שבמערכות ההפעלה windows אם אני משתמש במשאב בתוכנה ולא משחרר אותו בתוכנה המחשב לא ישחרר אותו גם אחרי שסגרתי את התוכנה, מה שבעצם יכול לגרום שאם אני אכתוב תוכנה בצורה לא נכונה היא תגמור לי את המשאבים (ובעצם תגרום לי באיזהו שהוא שלב מתקפת DOS על המחשב שלי...) האם זה נכון? וא"כ איך אני אמור לשחרר משאב שאני לא יכול לשחרר תוך כדי ריצת התוכנה בגלל שיכול להיות שאצטרך אותו אח"כ (כגון פתיחת טופס ע"י showdialog, שאם אני אשחרר אותו אח"כ אני לא אוכל לפתוח אותו שוב)?תודה.
פורסם 2013 באוקטובר 3112 שנים זה לא עובד ככה. מערכת ההפעלה דואגת לשחרר את המשאבים שהיא הקצתה לתוכנה כשזאת נסגרת.אתה כותב קוד ב-#C? למדת על ניהול משאבים והקצאות זיכרון?
פורסם 2013 באוקטובר 3112 שנים יכול להיות שזה היה נכון בעבר הרחוק, לפני ימי windows xp. היום זה לא ככה, חוץ ממשאבים שלא מנוהלים על ידי מערכת ההפעלה (נניח, יתכן שהמשאב הוא חיבור למסד נתונים שיש בו באג שדורש ניתוק מסודר של החיבור). Form הוא כמובן לא משאב כזה.איפה קראת את זה?
פורסם 2013 באוקטובר 3112 שנים מחבר זה לא עובד ככה. מערכת ההפעלה דואגת לשחרר את המשאבים שהיא הקצתה לתוכנה כשזאת נסגרת.אתה כותב קוד ב-#C? למדת על ניהול משאבים והקצאות זיכרון?אני כותב ב#c, וכן, למדתי על ניהול משאבים (למזלי ב#c לא מתעסקים עם זיכרון...) למדתי שיש משאבים שצריך לשחרר (לא פירטו איזה רק כתבו ש"יש משאבים שחשובים מדי מכדי לתת להם להשאר תפוסים שלא לצורך במשך זמן שרירותי" וצריך לשחרר אותם) בעזרת שיטות כמו close ו dispose (וכדי להיות בטוחים שהם יפונו צריך להשתמש בבלוק finaly). יכול להיות שזה היה נכון בעבר הרחוק, לפני ימי windows xp. היום זה לא ככה, חוץ ממשאבים שלא מנוהלים על ידי מערכת ההפעלה (נניח, יתכן שהמשאב הוא חיבור למסד נתונים שיש בו באג שדורש ניתוק מסודר של החיבור). Form הוא כמובן לא משאב כזה.איפה קראת את זה?כאן עמ' 4 היה עוד מקום אבל אני לא זוכר כרגע.אז במידה ואני לא אשחרר form בתוכנית שרצה על המחשב ללא הפסקה ויפתחו את הform שוב ושוב זה לא יתפוס יותר מדי משאבים? נערך 2013 באוקטובר 3112 שנים על-ידי eido300
פורסם 2013 באוקטובר 3112 שנים זה בכל מקרה לא נורא אם תשחרר את הform, כי הוא כן ישתחרר בסופו של דבר על ידי ה garbage collector.מה שכתוב במאמר שקישרת אליו היה נכון רק במערכות ישנות יותר כמו Windows 95, וגם זה לא היה באופן גורף. נערך 2013 באוקטובר 3112 שנים על-ידי שניצל
פורסם 2013 באוקטובר 3112 שנים מחבר אז היום המערכת משחררת את זה לבד בסגירת התוכנה?בform ה garbage collector ישחרר את זה גם באמצע ריצת התוכנה? (כמובן לא כשהform פתוח) ואם הוא ישחרר את זה איך אח"כ יוכלו לפתוח את זה שוב, הרי זה נפתח בshowdialog ולא בתור form חדש?תודה ומתנצל על החפירה.
פורסם 2013 בנובמבר 112 שנים אז היום המערכת משחררת את זה לבד בסגירת התוכנה?כמובן. garbage collector ישחרר את זה גם באמצע ריצת התוכנה?ודאי, זה התפקיד שלו.ואם הוא ישחרר את זה איך אח"כ יוכלו לפתוח את זה שוב, הרי זה נפתח בshowdialog ולא בתור form חדש?אתה לא מציג את אותו form בדיוק, אתה יוצר אובייקט חדש של אותה מחלקה ומציג אותו.
פורסם 2013 בנובמבר 112 שנים מחבר אתה לא מציג את אותו form בדיוק, אתה יוצר אובייקט חדש של אותה מחלקה ומציג אותו.אם זה בסך הכל אובייקט חדש של אותה מחלקה למה כל פעם שאני פותח את הטופס הוא מציג לי את הטופס עם כל השינויים שעשיתי בטופס הקודם (כגון checkbox, textbox וכו'...)?
פורסם 2013 בנובמבר 112 שנים עשית לו new או שאתה משתמש באותו אובייקט שהיה לך קודם?אם אתה משתמש באותו אובייקט אז הגיוני שזה מה שיקרה, הרי זה אותו אובייקט. אבל שים לב שאם עשית לו Dispose אז זה אסור ואתה חייב ליצור אובייקט חדש.יעזור אם תעלה לכאן את הקוד.
פורסם 2013 בנובמבר 112 שנים מחבר דיברתי על הform, אמרת שכשאני פותח form ע"י showdialog() זה לא פותח את אותו form אלא אובייקט חדש של המחלקה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.