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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. שאלה בC#: איך להריץ סקריפט שלא יתקע את התוכנה (windows form).

שאלה בC#: איך להריץ סקריפט שלא יתקע את התוכנה (windows form).

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

    כאשר מריצים סקריפט מתוך form מכיון שהסקריפט משתמש עם אותו thread של ה-form אז הוא בעצם תוקע את התוכנה.
    הפתרון הוא כמובן להריץ אותו על thread אחר.

    מה שהסתבכתי הוא מה לעשות כאשר אני צריך שהform לא ייתקע אבל בו זמנית הסקריפט יהיה לו אינטראקציה עם הform כמו למשל progressbar שנמצא בתוך ה form

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

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

      בWinforms נהוג להשתמש בBackgroundWorker שמיועד בדיוק עבור זה.
      בWPF משתמשים בטריד רגיל ומשתמשים במנגנון שליחת הודעות של WPF.

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

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

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

        @dovid
        תודה.
        אם הבנתי נכון אז backgroundworker עוזר רק כאשר מריצים סקריפט מתוך winform
        מה עושים כאשר המקרה הוא הפוך כשמריצים winform מתוך סקריפט

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

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

          @pcinfogmach המינוח סקריפט לא הכי מתאים פה, זה קוד.
          כל טופס של winforms מופיע מתוך קוד (לעיתים מאחורי הקלעים)
          והפקד האמור מתאים בכל מקרה.

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

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

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

            לדעתי הדרך הכי טובה זה להשתמש בשיטה האסינכרונית

            לדוגמה

            
                    //פונקציה אסינכרונית
                    private async Task DoSomething()
                    {
                        label1.Text = "Before await";// זה ירוץ על ה UI Thread
            
                        await Task.Run(() =>
                        {
                            // פה תכניס את הקוד הכבד שלך
                            // זה ירוץ על Thread אחר
                        });
            
                        label1.Text = "After await";// זה ירוץ על ה UI Thread
                    }
            

            בזמן שירוץ הTask ה-UIThread יהיה משוחרר
            תאסוף את הנתונים בתוך הTask ותכניס את זה לפקדים אחרי הTask כשתחזור ל-UIThread

            נ.ב. יש גם אפשרות לגשת ל-UIThread מתוך ה-Task או כל Thread אחר האינטרנט מלא בדוגמאות

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

              @Mordechai-0 תשובה מצויינת לאיך לעדכן אחרי, אבל השאלה עסקה בתוך כדי ועל זה נידבת בנ.ב. לכתוב שיש דוגמאות באינטרנט...

              אם עושים בלי BackgroundWorker אז הדרך היא ככה:

              progressBar1.Invoke(new Action(() => progressBar1.Value = 52));
              

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

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

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

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

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

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