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