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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. עבודה בתהליך משני (Thread / Task) ובכל זאת ה-UI תקוע

עבודה בתהליך משני (Thread / Task) ובכל זאת ה-UI תקוע

מתוזמן נעוץ נעול הועבר ארכיון code613m
34 פוסטים 4 כותבים 2.3k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    כתב ב נערך לאחרונה על ידי
    #19

    בקשר לא', כתבתי לך
    @דוד ל.ט.

    שים לב שקצת שיניתי פה כמה דברים כי פשוט אני לא יכול לכתוב לפי הראש שלך בלי לראות הכל, והכי טוב שאתה תכתוב לפי הראש שלי 🙂

    אין שום בעיה להשתמש במשתנה בסקופ גבוה ולשתף אותו וזה גם נחוץ לפעמים רק שים לב האם זה לא יכול לעשות תוצאות קצת משונות (טעינה כפולה של טבלה ועוד).

    בקשר לב', היית יכול לעשות ככה:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    	RunQuery("SELECT  8 FROM BIG_TABLE", Sub(hasSuccess)
    											 If Not hasSuccess Then
    												 'error
    											 Else If result.Tables.Count = 0 OrElse result.Tables(0).Rows.Count = 0 Then
    												 MessageBox.Show("!!!")
    											 Else
    												 DataGridView1.DataSource = result.Tables(0)
    											 End If
    										 End Sub)
    End Sub
    
    Private Async Sub RunQuery(command As String, doAfter As Action(Of Boolean))
    	pbarLoad.Visible = True
    	Dim ds = Await Task.Run(Function() query(command))
    	pbarLoad.Visible = False
    	doAfter(ds)
    End Sub
    
    
    Private Function query(command As String) As Boolean
    	conn.Open()
    	command.Connection = conn
    	command.CommandText = queryString
    	dataAdapter.SelectCommand = command()
    	Try
    		dataAdapter.Fill(result)
    	Catch
    		Return False
    	End Try
    	conn.Close()
    	Return True
    End Function
    

    אבל אני חושב שזה לא טוב לעשות ככה. לפעמים תצטרך לדעת את השגיאה ועוד.
    תוכל לעשות try מסביב למתודה האסינכורנית (הAwait) או לנהל את השגיאה בתוך התהליך ולשלוח את השגיאה בתוצאה (באובייקט שמכיל גם Exception). אבל באמת אני לא יודע מה הRight Way בהתנהלות מול שגיאות בasync.

    פורסם במקור בפורום CODE613 ב05/12/2017 23:36 (+02:00)

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

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

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

      אני מאוד השתעבדתי לצורת הפעולה שלך, אם הכל היה תלוי בי הייתי עושה ככה:

      Dim dataSet As DataSet
      
      Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      	UiBefore()
      	Try
      		Dim result = Await Query("SELECT  8 FROM BIG_TABLE")
      		dataSet = result
      		If result.Tables.Count = 0 OrElse result.Tables(0).Rows.Count = 0 Then
      			MessageBox.Show("!!!")
      		Else
      			DataGridView1.DataSource = result.Tables(0)
      		End If
      	Catch ex As Exception
      		'erro
      	End Try
      	UiAfter()
      End Sub
      
      Private Function query(command As String) As DataSet
      	Using conn As New SqlConnection
      		Using da As New SqlDataAdapter(command, conn)
      			conn.Open()
      			Dim ds As New DataSet
      			da.Fill(ds)
      			Return ds
      		End Using
      	End Using
      End Function
      
      Private Sub UiBefore()
      	pbarLoad.Visible = True
      End Sub
      Private Sub UiAfter()
      	pbarLoad.Visible = False
      End Sub
      

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

      פורסם במקור בפורום CODE613 ב05/12/2017 23:56 (+02:00)

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

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

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

        תודה על תשובתך!

        בקשר לב',
        דווקא לשגיאות בתוך התהליך כבר עכשיו זה מנוהל מתוך מתודת התהליך עצמו,
        אבל עיקר השאלה ששאלתי זה למקרה של עצירת מתודת ה-Async עוד לפני שהיא מגיעה לשלב של התהליך.

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

        עד ש"העלית אותי" על ה-Async, עשיתי את זה עם הפונקצייה BeforeQuery, שבמידה והיא נפלה באמצע - היא החזירה false.
        השאלה אם יש דרך דומה להגדיר גם את מתודת ה-Async כ"פונקצייה", או אולי דרך אחרת בכלל?

        תודה רבה!!!

        פורסם במקור בפורום CODE613 ב06/12/2017 00:00 (+02:00)

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

          אני רואה שאנחנו עובדים בצורה אסינכורנית, תוך כדי שאתה כתבת תגובה חדשה - אני כתבתי תגובה לתגובתך הקודמת. :lol:

          וואו, הרעיון שהעלית בתגובתך האחרונה - הוא אדיר, וכמובן שהוא מייתר לגמרי את תגובתי הקודמת שנכתבה לפני שראיתי את הרעיון שלך.

          תודה רבה!!!

          אגב,@דוד ל.ט.

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

          פורסם במקור בפורום CODE613 ב06/12/2017 00:38 (+02:00)

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

            אז אחרי שהוצאתי את המיץ לכולם (למרות ש @דוד ל.ט. הבטיח שאין לי סיכוי לשגע את כולם, אני בטוח שהוא כבר עשה על זה חרטה בלב שלם ;))
            "הזורעים בדמעה ברינה יקצורו" -
            אני משאיר פה לכמה ימים את התוכנה המוכנה כולל קבצי קוד המקור, אולי יצא מזה משהו למישהו.

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

            אם בסופו של יום - כשמישהו מהחברים כאן - שבמקרה המספר שלו שמור אצלי באנשי הקשר (ויש כאן כמה כאלו) -
            יתקשר אלי, ואני ארים את השיחה: @ניק-פלוני-אלמוני, מה נשמע?
            אז תדעו לכם - שהכל בזכות הצדיקים דכאן, בלעדיהם כנראה הייתי ממשיך לחלום עד 120 על "ללמוד יום אחד SQL"... :smile:

            ובעז"ה אחרי שאשלים את פרוייקט הדטה בייס, אנסה להתחיל עם עולם ה WEB.
            היכונו לשאלת השאלות עם איזה IDE הכי מומלץ להתחיל... :mrgreen:

            גישה למסדי MySQL.zip

            פורסם במקור בפורום CODE613 ב06/12/2017 18:51 (+02:00)

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

              @איש-אחד, ברכותיי! לא הורדתי את התוכנה אבל אני כבר רואה איפה אתה.
              ואגב, בשלב זה יש לך על מה לחשוב על api לcontact.

              פורסם במקור בפורום CODE613 ב06/12/2017 19:10 (+02:00)

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

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

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

                @דוד ל.ט.

                ואגב, בשלב זה יש לך על מה לחשוב על api לcontact.
                האמת, שהפעם הצלחת לבלבל אותי! :smile:

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

                אז למעשה, אתה כן ממליץ לקפוץ למים וללכת על סנכרון מלא עם ה-API של גוגל?

                תודה רבה!

                פורסם במקור בפורום CODE613 ב06/12/2017 20:11 (+02:00)

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

                  האם הAPI לגוגל קריטי לך? כמה זה חשוב לך? כמה משתמשים נוספים לך? אולי תעשה עדכון ידני פעם בחודש?
                  אני יודע שזמנך יקר. לכן אני ממליץ כך.

                  פורסם במקור בפורום CODE613 ב07/12/2017 11:48 (+02:00)

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

                    @מנצפך

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

                    לטווח הקרוב, באמת לא קריטי. אפשר לעשות זאת ידני - כמו שדיברנו.
                    עיקר העניין הוא, שבפעם הבאה שתתקשר אלי, אזהה שזה אתה, ולא עוד איזה נודניק תורן... :smile:
                    ובנימה יותר רצינית,
                    יש לאשתי עסק זעיר, וחשוב לה היכולת לזהות לפני שהיא עונה - את הלקוחות שמגיע להם יחס X מול הלקוחות ש(לא) מגיע להם יחס Y... 😉
                    ובשביל זה, ברור שאתה צודק שאין צורך ב-API ובסנכרון, ולכן התחלתי כבר לצעוד בכיוון הזה.

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

                    פורסם במקור בפורום CODE613 ב07/12/2017 12:22 (+02:00)

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

                      פתח פרוייקט בgoogle console developers.
                      אפשר את הAPI ששמו Contact API.
                      אח"כ תוסיף בCredentials אחד חדש מסוג OAuth client ID.
                      תעדכן.

                      פורסם במקור בפורום CODE613 ב07/12/2017 14:59 (+02:00)

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

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

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

                        @דוד ל.ט.

                        תעדכן.

                        כל הכבוד, אתגרת אותי לא רע!

                        מעולם לא נכנסתי רשמית לעולם של ה-API (למרות שהשתמשתי בזה מידי פעם - מבלי לדעת שזה בעצם API...),
                        וקל וחומר שלא הכרתי את ה-API המורכבים של גוגל,
                        בקיצר, התחלתי ללמוד את העניין (של איך מצליחים לתקשר עם גוגל, אל תדאג - לא שום דבר מעבר),
                        נראה לי שפחות או יותר קלטתי מי נגד מי ולמה,

                        ואז...

                        ואז הגיע תורו של ויזואל סטודיו "להוציא לי קרניים" :twisted:

                        אני מנסה להוסיף את ה-API מה-NuGet (שעד השעות האחרונות חשבתי שזה קשור רק לעולם הקולינרי - במבה, דגני בוקר etc),
                        הוא מתחיל לשמור את הקבצים בתיקיית הפרויקט, ואז מוחק אותם שוב בתואנה:
                        An error occurred while writing file 'D:\BlaBla\kuku\packages.config': Failed to write packages.config as XML file 'D:\BlaBla\kuku\packages.config'. Error: 'Illegal characters in path'.
                        אציין רק, אין תווים בעברית ולא רווחים לאורך כל ה PATH של הפרויקט,
                        כמו כן, ניסיתי בשני מחשבים שונים, אחד עם VS 2015 והשני עם VS 2017. אותו דבר.
                        אם זה נפק"מ, אז המכנה המשותף בין המחשבים שמותקן עליהם Win 10 Fall Creators Update, והם גולשים דרך נטפרי. (ויש להם מסך :lol: )

                        תודה רבה!

                        פורסם במקור בפורום CODE613 ב07/12/2017 19:37 (+02:00)

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

                          ממש משונה. היה פה כבר כזה סיפור
                          http://code.613m.org/viewtopic.php?f=1&t=1948

                          פורסם במקור בפורום CODE613 ב07/12/2017 19:45 (+02:00)

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

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

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

                            פתח יוזר חדש במחשב, ותפתח בVS פרוייקט ותעדכן.
                            אם זה עובד זה משהו בהגדרות המשתמש שעשית בשתי המחשבים.
                            פה אני רואה שיש כזה דבר בהגדרות תאריך עבריות:
                            https://github.com/NuGet/Home/issues/2798

                            פורסם במקור בפורום CODE613 ב07/12/2017 19:56 (+02:00)

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

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

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

                              @דוד ל.ט.

                              ממש משונה. היה פה כבר כזה סיפור
                              viewtopic.php?f=1&t=194

                              הלינק שבור, אבל לא נורא:

                              @דוד ל.ט.

                              פה אני רואה שיש כזה דבר בהגדרות תאריך עבריות:

                              תסלח לי שויתרתי על יצירת משתמש נוסף 😉
                              החלפתי זמנית ללוח גרגוריאני, התקנתי, החזרתי ללוח עברי, ואני רץ למעריב...

                              Successfully installed 'Google.Apis.Auth 1.31.0' to העלאת אנשי קשר של גוגל ל-MySQL
                              ========== Finished ==========**הכל מעולה!**
                              

                              דאאאאאויד!!! דאאאאאויד!!!
                              תודה רבה!!!

                              פורסם במקור בפורום CODE613 ב07/12/2017 20:43 (+02:00)

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

                                אמרתי לך לפתוח משתמש חדש כי לא ידעתי איזה עוד הגדרה יכולה להיות וככה במכה זה כ-ל ההגדרות.
                                הלינק תוקן.

                                פורסם במקור בפורום CODE613 ב07/12/2017 21:09 (+02:00)

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

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

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

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

                                  בשביל הסדר הטוב, אם יהיו כאלו שיחפשו בפורום את נושא הגוגל API, עדיף שימצאו אותו כנושא משלו - ולא כהמשך למשהו אחר.

                                  נ.ב. @דוד ל.ט. תודה רבה גם על זה:@דוד ל.ט.

                                  ממש משונה. היה פה כבר כזה סיפור
                                  viewtopic.php?f=1&t=1948
                                  זה הוסיף לי ידע חשוב!

                                  פורסם במקור בפורום CODE613 ב08/12/2017 00:37 (+02:00)

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

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

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

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