שאלה בC#: איך להריץ סקריפט שלא יתקע את התוכנה (windows form).
-
כאשר מריצים סקריפט מתוך form מכיון שהסקריפט משתמש עם אותו thread של ה-form אז הוא בעצם תוקע את התוכנה.
הפתרון הוא כמובן להריץ אותו על thread אחר.מה שהסתבכתי הוא מה לעשות כאשר אני צריך שהform לא ייתקע אבל בו זמנית הסקריפט יהיה לו אינטראקציה עם הform כמו למשל progressbar שנמצא בתוך ה form
-
בWinforms נהוג להשתמש בBackgroundWorker שמיועד בדיוק עבור זה.
בWPF משתמשים בטריד רגיל ומשתמשים במנגנון שליחת הודעות של WPF.@dovid
תודה.
אם הבנתי נכון אז backgroundworker עוזר רק כאשר מריצים סקריפט מתוך winform
מה עושים כאשר המקרה הוא הפוך כשמריצים winform מתוך סקריפט -
לדעתי הדרך הכי טובה זה להשתמש בשיטה האסינכרונית
לדוגמה
//פונקציה אסינכרונית 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 אחר האינטרנט מלא בדוגמאות
-
כאשר מריצים סקריפט מתוך form מכיון שהסקריפט משתמש עם אותו thread של ה-form אז הוא בעצם תוקע את התוכנה.
הפתרון הוא כמובן להריץ אותו על thread אחר.מה שהסתבכתי הוא מה לעשות כאשר אני צריך שהform לא ייתקע אבל בו זמנית הסקריפט יהיה לו אינטראקציה עם הform כמו למשל progressbar שנמצא בתוך ה form
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות