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

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

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

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

מתוזמן נעוץ נעול הועבר תכנות
12 פוסטים 4 כותבים 330 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום