עצירת פעולה שרצה בלולאה בטופס ויז'ואל בייסיק
-
חבר הביא לי משהו שמישהו כתב לו לפני כמה שנים, תוכנה קטנה שכתובה בויזו'אל שהוא מכניס נתון, והתוכנה מבצעת עליו כל מיני דברים, מה שעשיתי לו זה הוספתי לו אפשרות לקחת רשימה של נתונים בכל פעם מקובץ אקסל במקום שהוא יכניס כל פעם נתון אחד.
הבעיה היא, שמרגע הלחיצה שמפעילה את הפונקציה ועד לסיום החישוב עבור כל הנתונים לא חלון התוכנה לא מגיב למשתמש, והוא רוצה שאוסיף לו לחצן לעצירת הפעולה, אבל הלחצן לא יגיב...
(אני גם לא יודע איך צריך לעצור את הפעולה.. חשבתי להוסיף ללולאה בדיקה של משתנה בוליאני שאני ישנה אותו בכפתור העצירה)
אשמח לעזרה
מדובר בפרויקט מסוג WindowsFormsApp או שככה לפחות זה השם של תיקיית הפתרון. -
@מוטי-מן יש את Application.DoEvents שאפשר להוסיף לכל איטרציה של הלולאה
יותר טוב להריץ את הפונקציה הכבדה על thread נפרד:
await Task.Run(() => yourFunction());
ע"ע https://grantwinney.com/using-async-await-and-task-to-keep-the-winforms-ui-more-responsive/
-
@dovid ניסיתי לעשות לפי מה שכתוב שם, וזה אכן עובד, אבל לא מבצע לי בפועל את מה שאני צריך, ונראה לי שזה בגלל שבתחילת הפונקציה יש את הקטע הזה שפותח דיאלוג בחירת תיקייה (יש בהמשך גם דיאלוג בחירת קובץ)
Dim selectedFolder As String = "" MsgBox("02") Using dialog As New FolderBrowserDialog() dialog.Description = "בחר את התיקייה" dialog.ShowNewFolderButton = False Dim result As DialogResult = dialog.ShowDialog() If result = DialogResult.OK Then selectedFolder = dialog.SelectedPath End If End Using MsgBox("03")
החלון של 02 קופץ אבל החלון של 03 כבר לא קופץ..
וזה ממשיך לרוץ, כאילו אני מתכוון שזה לא נגמר אלא ממתין, כי עשיתי התניה בעת הלחיצה על הכפתור שבודקת האם התהליך רץ, וא"כ תקפיץ הודעה וההודעה קופצת...
-