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

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

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

הפסקה והתחלה לסרוגין של תהליך

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

    נניח שאני עושה לולאה, ואני רוצה להספיק באמצע. אבל להמשיך אחרי קבלת ארוע מהתשמש אבל בדיוק באתו מקום.
    אני עובד עם backgroundWorker, ויש לו אפשרות ביטול אבל לא Resume

    הקוד כרגע נראה כך:
    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
    int sum = 0;
    for (int i = 1; i < 101; i++)
    {
    sum += i;
    //כאן שיהא איזה אפשרות לעצור להמשיך מחדש
    backgroundWorker1.ReportProgress(i);
    }
    label1.Text = sum.ToString();
    }

    פורסם במקור בפורום CODE613 ב09/11/2016 12:56 (+02:00)

    הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
    https://programing-tips.web.app/

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

      אין בBackgroundWorker פישוט לעניין הזה. אז צריך להזיע, ולעבוד עם הכלים המעצבנים של טרידים.
      חיפשתי באינטרנט ומצאתי http://stackoverflow.com/questions/142826/is-there-a-way-to-indefinitely-pause-a-thread.
      העתקתי לדוגמה מתאימה עם BackgroundWorker:

      ManualResetEvent _suspendEvent = new ManualResetEvent(true);
      
      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
      {
          int sum = 0;
          for (int i = 1; i < 101; i++)
          {
              sum += i;
              //בדיקה האם יש השהיה
              _suspendEvent.WaitOne(Timeout.Infinite);
      
              backgroundWorker1.ReportProgress(i);
              Thread.Sleep(100);
          }
          e.Result = sum;
      }
      
      private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
      {
          this.Text = e.ProgressPercentage.ToString();
      }
      //התחלה
      private void button1_Click(object sender, EventArgs e)
      {
          backgroundWorker1.RunWorkerAsync();
      }
      //אירוע סיום
      private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
      {
          label1.Text = e.Result.ToString();
      }
      
      //השהיה
      private void button2_Click(object sender, EventArgs e)
      {
          _suspendEvent.Reset();
      }
      //הפעלה מחדש 
      private void button3_Click(object sender, EventArgs e)
      {
          _suspendEvent.Set();
      }
      

      פורסם במקור בפורום CODE613 ב09/11/2016 18:53 (+02:00)

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

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

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

        @נתנאל

        נניח שאני עושה לולאה, ואני רוצה להספיק באמצע. אבל להמשיך אחרי קבלת ארוע מהתשמש אבל בדיוק באתו מקום.
        אני עובד עם backgroundWorker, ויש לו אפשרות ביטול אבל לא Resume

        הקוד כרגע נראה כך:
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
        int sum = 0;
        for (int i = 1; i < 101; i++)
        {
        sum += i;
        //כאן שיהא איזה אפשרות לעצור להמשיך מחדש
        backgroundWorker1.ReportProgress(i);
        }
        label1.Text = sum.ToString();
        }

        פשוט תשים לולאה ריקה שלא עושה כלום רק מסתובבת עד קבלת הארוע. זה מה שלמעשה עושה sleep מאחורי הקלעים.

        פורסם במקור בפורום CODE613 ב09/11/2016 21:00 (+02:00)

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

          פשוט תשים לולאה ריקה שלא עושה כלום רק מסתובבת עד קבלת הארוע.

          זה לא שיקול לא לעשות כן מבחינת פרפומנס?

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

          פורסם במקור בפורום CODE613 ב09/11/2016 23:14 (+02:00)

          הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
          https://programing-tips.web.app/

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

            תשתמש בInvoke() כדי לציין שישאר על אותו טרייד.
            אני לא ככ מבין בזה, אבל נראה לי שזה הפתרון..

            פורסם במקור בפורום CODE613 ב09/11/2016 23:26 (+02:00)

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

              הוא עדיין כותב לי את השגיאה שהוא לא יכול לטפל בפקדים שלא נוצרו באותו טרייד, אז הבנתי שאני צריך ל"הוציא" החוצה מהוורקר את מה שאני רוצה להתשמש בו בפקדים. ההתקדמות יכולה להראות גם אחוזים אבל אפשר גם להעביר אוביקט. וכרגע הקוד נראה כך:

              private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
                      {
                          int sum = 0;
                          for (int i = 1; i < 101; i++)
                          {
                              sum += i;
                                    backgroundWorker1.ReportProgress(i, sum.ToString());
                              _suspendEvent.WaitOne(Timeout.Infinite);            
                              Thread.Sleep(100);
                          }
                      }
              
                      private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
                      {
                         progressBar1.Value = e.ProgressPercentage;  
                          label1.Text = (string)(e.UserState);
                      }
              

              פורסם במקור בפורום CODE613 ב09/11/2016 23:42 (+02:00)

              הצטרפות לרשימת התפוצה בעניני תכנות JS , React , Node וכל מיני דברים מענינים כאן :cool:
              https://programing-tips.web.app/

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

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

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

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