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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ProgressBar בWPF תוך כדי פעולת thread

ProgressBar בWPF תוך כדי פעולת thread

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 4 כותבים 330 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מחובר
    dovidD מחובר
    dovid ניהול
    השיב לpcinfogmach ב נערך לאחרונה על ידי
    #2

    @pcinfogmach כתב בProgressBar בWPF תוך כדי פעולת thread:

    ניסיתי על ידי Dipatcher ללא הועיל.
    ניסיתי על ידי Binding ללא הועיל.

    Binding לא משנה פה, Dispacher עשוי בשביל זה אבל על האופן הזה לא הבאת קוד שנבין למה לך זה לא עובד.

    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

    pcinfogmachP תגובה 1 תגובה אחרונה
    0
    • pcinfogmachP מנותק
      pcinfogmachP מנותק
      pcinfogmach
      השיב לdovid ב נערך לאחרונה על ידי
      #3

      @dovid

      private async void search(string[] files)
      {
          progressBar.Maximum = files.Length;
          List<System.Threading.Tasks.Task> searchTasks = new List<System.Threading.Tasks.Task>();
          foreach (string file in files)
          {
              searchTasks.Add(Task.Run(() =>
              {
                  this.Dispatcher.Invoke(() =>
                  {
                      progressBar.Value = progressBar.Value + 1;
                      File.ReadAllLines(file);
                  });
              }));
          }
          await System.Threading.Tasks.Task.WhenAll(searchTasks);
          progressBar.Value = 0;
      }
      

      גמ"ח מידע מחשבים ואופיס

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

        הסיבה שלא קורה כלום זה כי עשית progressBar.Value = 0 בסוף.
        זה קורה רק אחרי שהכל כבר נגמר שהרי שורה לפני כן (בשורה 16) המתנת לסיומם.
        קשה לי מאוד לראות את השאלות שלך ככה. זה תענוג לעזור למישהו להתקדם, אבל זה עינוי לראות אותו מתבוסס בניסוי וטעיה.

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

        pcinfogmachP תגובה 1 תגובה אחרונה
        0
        • pcinfogmachP מנותק
          pcinfogmachP מנותק
          pcinfogmach
          השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
          #5

          @dovid
          לא הבנתי כלום. אני מודה באשמה הניסיון שלי בbinding היה ניסוי וטעיה (אני עוד לא מבין את המושג מספיק). אבל הקוד של ה-Invoke לא נתפס אצלי כניסוי וטעיה - אולי הוא טעות אבל לא ניסוי וטעיה.

          הנה איך שאני מבין את הקוד - תסביר לי היכן אני טועה או פשוט לא מבין כלום:

          1. הקוד יוצר רשימה של משימות
          2. הוא מבצע אותם בצורה של threading
          3. כל משימה מכילה בתוכ פקודה של עדכון ה-progressbar (שזה לא קורה!)
          4. לאחר סיום כל המשימות ה-progressbar מאופס כדי שיהי מוכן לחיפוש הבא.

          נ.ב. גם אשמח אם תסביר לי למה בwinforms בדיוק אותו הדבר עובד מצויין. (רק ששם אני יכול להשתמש עם invoke בלי dispatcher).

          גמ"ח מידע מחשבים ואופיס

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

            אתה צודק, הבעיה לא קשורה למה שכתבתי, הProgressBar לא מתעדכן בעת ריצת הTask .
            הטענה שלי היא לא שאתה לא עושה את המיטב, אלא שאתה בלי ספר/מדריך/מורה דרך נורמליים. גם אם הקוד שלך היה עובד הוא גרוע מאוד, ולכן זה מציק לי.

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

            pcinfogmachP תגובה 1 תגובה אחרונה
            1
            • pcinfogmachP מנותק
              pcinfogmachP מנותק
              pcinfogmach
              השיב לdovid ב נערך לאחרונה על ידי
              #7

              @dovid
              אשמח אם תסביר לי למה הקוד גרוע מאוד.
              תכל'ס יש פיתרון לבעיה? איך להציג התקדמות בפעולה שכזו?

              גמ"ח מידע מחשבים ואופיס

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

                למה לא הסברתי, וכי אני מחכה שתבקש?
                אתה פתוח נושא על בעיה X, ואתחיל ללמד אותך על דברים אחרים בהתכתבות מייגעת?
                ספציפית לבעיה הזאת מן הסתם גוגל על task dispatcher progressbar יעזור לך,
                כך שאתה יכול לדלג על דברי המוסר שלי.

                מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

                  @dovid כתב בProgressBar בWPF תוך כדי פעולת thread:

                  ספציפית לבעיה הזאת מן הסתם גוגל על task dispatcher progressbar יעזור לך,

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

                  אשמח מאוד אם מישהו ירחם עלי ויסביר לי מה הפתרון.

                  גמ"ח מידע מחשבים ואופיס

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

                    @pcinfogmach כתב בProgressBar בWPF תוך כדי פעולת thread:

                    private async void search(string[] files)
                    {
                        progressBar.Maximum = files.Length;
                        List<System.Threading.Tasks.Task> searchTasks = new List<System.Threading.Tasks.Task>();
                        foreach (string file in files)
                        {
                            searchTasks.Add(Task.Run(() =>
                            {
                                this.Dispatcher.Invoke(() =>
                                {
                                    progressBar.Value = progressBar.Value + 1;
                                    File.ReadAllLines(file);
                                });
                            }));
                        }
                        await System.Threading.Tasks.Task.WhenAll(searchTasks);
                        progressBar.Value = 0;
                    }
                    

                    למה File.ReadAllLines(file) נמצא בתוך הקריאה ל Dispatcher.Invoke ? תנסה להוציא אותו מחוץ ל Dispatcher, הקריאה אמורה להכיל קוד שמשנה את התצוגה בלבד. הגיוני שהתרד של התצוגה נתקע כי את מריץ עליו עוד לוגיקה שלא קשורה ל UI שיתכן שגוזלת זמן, ובגלל שה UI לא מגיב אתה לא רואה את ההתקדמות. (חוץ מזה שצריך לאפס את progressBar.Value לאפס, מה ש @dovid כתב לך)

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

                      @קומפיונט ענה את התשובה המדוייקת, הInvoke עסוק בעצמו בקריאת הקבצים,
                      אם השורה של הקריאה תהיה מחוץ לInvoke זה אמור לעבוד טוב.

                      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

                      תגובה 1 תגובה אחרונה
                      0
                      • Aharon 0A מנותק
                        Aharon 0A מנותק
                        Aharon 0
                        כתב ב נערך לאחרונה על ידי
                        #12

                        עדיין צפוי לך בעיות בקוד, תתחיל מזה שתעטוף את הקוד ב try ו catch, ולפי השגיאה שתקבל תחפש את הפיתרון.

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

                        בא תתחבר לדף היומי!
                        • התחברות

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

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