• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

שגיאה לא ברורה

מתוזמן נעוץ נעול הועבר תכנות
10 פוסטים 3 כותבים 90 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי מנצפך
    #1

    C#
    יש לי תוכנה שמנטרת יצירה של קבצים ע"י המחלקה FileSystemWatcher
    לאובייקט של המחלקה יש Event :
    WatcherCreated
    שמופעל בכל יצירה של קובץ

    זה הקוד שכתבתי בתוך האירוע הנ"ל

    private void Watcher_Created(object sender, FileSystemEventArgs e)
            {
                int i = 0;
                try
                {
                    if (!e.FullPath.EndsWith(".tmp", StringComparison.OrdinalIgnoreCase))
                        i = 1;
                        if (!Globals.UserFiles.Contains(e.FullPath))
                    {
                        i = 2;
                        Globals.UserFiles.Add(e.FullPath);
                        i = 3;
                        Logger.DebugLog("Created: " + e.FullPath);
                        i = 4;  
                    }
                }
                catch (Exception ex)
                {
            // LOG the error           
                }
            }
    

    אני לא מבין למה, אבל לפעמים אני מקבל שגיאה
    System.IndexOutOfRangeException
    עכשיו, ביומן אני כותב גם את השגיאה וגם את הערך של I, בשביל לדעת איפה השגיאה קרתה.
    לפעמים הערך של I הוא 0 (זה אומר שהשגיאה קרתה לפני שורה 7) ולפעמים 1 (כלומר שהשגיאה קרתה לפני שורה 10).

    מה יכול להיות הבעיה?
    אולי בגלל שיש שני טרדים שניגשים לליסט Globals.UserFiles ?

    עריכה: אני חושב שכאן יש התייחסות לבעיה דומה, אך ללא פתרון:
    https://stackoverflow.com/questions/34582537/arraylist-contains-throws-system-indexoutofrangeexception

    yossizY תגובה 1 תגובה אחרונה
    0
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב למנצפך ב נערך לאחרונה על ידי yossiz
    #2

    @מנצפך מה ה-stack המלא של השגיאה?
    (אין צורך להביא את מה שקודם ל-Watcher_Created רק מה שמגיע אח"כ.)
    אם באמת יש שני טרידים שניגשים ל-Globals.userfiles אז צריך לטפל בזה על ידי שימוש ב-lock. (למרות שאני לא רואה שום ציור בו השגיאה יכולה לקרות כאשר i==0)

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    1
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #3

    אכן כדבריך @yossiz זה כנראה בגלל הגישה משני טרדים.
    גם כאן:
    https://stackoverflow.com/questions/3794171/under-what-circumstance-system-collections-arraylist-add-throws-indexoutofrangee

    למעשה זה יישמע מוזר אבל בחיים לא זכור לי שהשתמשתי ב lock.
    אשמח לשמוע עליו עוד ומה צריך להביא בחשבון.

    תגובה 1 תגובה אחרונה
    0
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #4

    אין לי הסבר לזה אבל זה נראה שגם Lock לא עוזר.
    מה עוד אפשר לעשות?

    תגובה 1 תגובה אחרונה
    0
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #5

    אולי צריך לשים lock בכל מקום, ולא רק במקום שקיבלתי את השגיאה?
    אני מנסה שוב.

    yossizY תגובה 1 תגובה אחרונה
    1
  • yossizY מנותק
    yossizY מנותק
    yossiz
    השיב למנצפך ב נערך לאחרונה על ידי
    #6

    @מנצפך נראה לי שצריך lock בכל מקום שניגש לאובייקט.
    אולי יותר קל להשתמש בזה: https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist.synchronized?view=netframework-4.8

    📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

    תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי dovid
    #7

    @מנצפך
    אתה חייב להביא את כל הexception (ויכול להיות inner exception) וגם את הfull stack, או לחילופין לתת סקירה מה אתה עושה בעצם.
    (בשביל לקבל את כל זה מחוץ לזמן דיבאג תעשה תיעוד לex.ToString() ותדאג שיהיה ליד התוכנה את הקובץ pdb.
    בלי זה אין תשובה לשאלה, ובמילים אחרות אין שום דבר בקוד שלך שמסביר את השגיאה.

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #8

    למעשה כבר הפסקתי לקבל את השגיאות הללו.
    כנראה באמת צריך לשים lock בכל מקום.

    @dovid לגבי הקובץ pdb יש לי איתו איזושהי בעיה- נושא לאשכול נפרד, אבל כאמור הבעיה הגדולה נפתרה.

    dovidD תגובה 1 תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב למנצפך ב נערך לאחרונה על ידי
    #9

    מאוד יכול להיות שזה לא "פתרון", אלא השקטת הבעיה בכח, אבל זה אכן יכול להיות מספיק כל עוד לא יפריע לך.

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    0
  • מנצפךמ מנותק
    מנצפךמ מנותק
    מנצפך
    כתב ב נערך לאחרונה על ידי
    #10

    למה זה לא פתרון?
    זו בדיוק הבעיה. שיש גישה מכמה טרדים, וכפי הקישורים שצירפתי.

    בסה"כ עשיתי שם פעולות סטנדרטיות על רשימות מקושרות (list) וקיבלתי שגיאות שלא היו אמורות להיות.

    תגובה 1 תגובה אחרונה
    1

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.