פורסם 2012 בפברואר 1613 שנים יש לי תוכנה שמריצה קבצים מסויימים אחד אחרי השני, כאשר יש הפרש של למעלה משנייה בין קובץ לקובץ אני רושם בתוכנה שהיא מחכה X שניות לקובץ הבא, מה שאני רוצה לעשות זה שאם למשל התוכנה רושמת לי כמו שהיא רושמת עכשיו "waiting for the next file ...X sec" אז שהיא תספור אחורה כל שנייה למשל אם התוכנה מחכה 4 שניות אז בעזרת טיימר לאחר שנייה זה ירד ל-3 וכד'. זו המתודה שלי שבעצם נכנסת ל-if מתי שהקובץ הבא יגיע אחרי למעלה משנייה (המתודה הזו בעצם נמצאת בתוך פונקציה שדוגמת את האובייקט שלי שמריץ את הקבצים ופועלת בהתאם אם פרופרטי מסויים השתנה) ואז אני רוצה שהטיימר יופעל כאשר המשתנה fileData.nextFile הוא int והוא בעצם אומר בעוד כמה שניות הקובץ הבא יופיע, ניסיתי לעשות את זה עם טיימר אבל לא הלך לי, כרגע כמו שאתם רואים התוכנה רושמת מתי יופיע הקובץ הבא אבל ללא כל ספירה אחורה (זה WinForm והמשתנה נכנס ללייבל) if (fileData.messages == true) { LabelStatus.Text = "Waiting for next file... " + "(" + (fileData.nextFile) / 1000 + " sec)"; }
פורסם 2012 בפברואר 1613 שנים אתה מוסיף קונטרול טיימר.קובע את ה-interval שלו ל-1000 (מילישניות).נרשם לאוונט שלו ושם בו קריאה לפונקציה שמעדכנת את הלייבל. בפונק הזאת אתה גם מוריד שנייה מ-fileData.nextFileבכל פעם ומציג.לטיימר יש מתודות start ו-stopאתה קורא ל-stop ומיד ל-start לפני שאתה מפעיל את כל קובץ.
פורסם 2012 בפברואר 1713 שנים מחבר הגדרתי את הטיימר ל-1000 מילישניות אבל לא הבנתי על איזה פונקציה דיברת שעלי להירשם אליה ולמה לעשות לטיימר Stop ואז Start.
פורסם 2012 בפברואר 1713 שנים http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspxראה דוגמה.ועוד על events:http://msdn.microsoft.com/en-us/library/ms366768.aspx
פורסם 2012 בפברואר 1713 שנים מחבר האם את הפונקציה שלי שתקבל מספר ובכל פעם שהטיימר יופעל (כל שנייה) אני צריך לכתוב בתוך האבנט של הטיימר שנוצר לי ?אני מתכוון לאבנט הזה: private void timer1_Tick(object sender, EventArgs e) { }
פורסם 2012 בפברואר 1713 שנים מה?פה יש בדיוק דוגמה למה שאתה רוצה לעשות:http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick.aspx
פורסם 2012 בפברואר 1713 שנים מחבר השאלה שלי היא איפה אני אמור לרשום את המתודה שעושה מה שעושה, האם לכתוב Class חדש או לרשום את זה בתוך האבנט שנוצר לי כשהוספתי את הטיימר לתוכנית, ז"א פה: private void timer1_Tick(object sender, EventArgs e) { }
פורסם 2012 בפברואר 1713 שנים איפה שבא לך, כל עוד תדאג לרשום את הפונקציה לאיבנט באמצעות =+.הקוד שכתבת כאן זה לא אבנט, זה סתם פונקציה.
פורסם 2012 בפברואר 1713 שנים האם את הפונקציה שלי שתקבל מספר ובכל פעם שהטיימר יופעל (כל שנייה) אני צריך לכתוב בתוך האבנט של הטיימר שנוצר לי ?אני מתכוון לאבנט הזה: private void timer1_Tick(object sender, EventArgs e) { }את הקוד הזה קיבלת כשלחצת פעמיים על עצם ה Timer שלך?אם כן, אתה יכול לכתוב בו את הקוד שאתה רוצה להפעיל - והוא כבר רשום ל Event בשבילך.
פורסם 2012 בפברואר 1713 שנים מחבר כן, את הקוד הזה קיבלתי כשלחצתי פעמיים על הטיימר.אוקיי אבל הבעיה שלי היא כזאת:זו המתודה שלי שאליה אני נכנס אם הקובץ הבא יגיע בהפרש של למעלה משנייה ואז אני רוצה שהטיימר יכנס לפעולה ויספור אחורה: if (progress.messages == true) { double nextFilet = progress.nextFilet; LabelStatus.Text = "Waiting for next packet... " + "(" + (nextFilet) / 1000 + " sec)"; }המשתנה nextFilet בעצם אומר מתי יגיע הקובץ הבא ואותו אני צריך נראה לי לשלוח לטיימר שיתחיל לספור אחורה ז"א אם בכניסה למתודה הוא 3.5 ז"א בעוד 3.5 שניות יגיע הקובץ הבא אז אני רוצה שהטיימר יספור 3.5 ויציג את זה בלייבל ואחרי שנייה 2.5 ויציג ואחרי שנייה 1.5 ואז 0.5 ואז כמובן התוכנית ממשיכה.איך אני עושה את זה ?
פורסם 2012 בפברואר 1713 שנים כמו שזה נראה, אתה צריך להעתיק את הקוד ששמת כאן, למתודה שקיבלת כשלחצת פעמיים כל הTimer.בכל מקרה - אם אתה רוצה לייצר הפרדת ממשק-מימוש, אתה יכול לדאוג שהמתודה של הטיימר קוראת למתודה שאתה כתבת, שהתוכן שלה הוא: if (progress.messages == true){ double nextFilet = progress.nextFilet; LabelStatus.Text = "Waiting for next packet... " + "(" + (nextFilet) / 1000 + " sec)";}
פורסם 2012 בפברואר 1713 שנים מחבר מה שעשיתי זה זה: if (progress.messages == true) { timer1.Tick += new EventHandler(timer1_Tick); timer1.Start(); double nextFile = progress.nextPacket; }ובטיימר עצמו אני מציג מה שאני רוצה.עכשיו הבעיה שלי היא איך אני יכול להעביר לטיימר מספר מסויים ככה שכל שניה יוריד ממנו 1 ויציג אותו בלייבל ? (המשתנה nextFile)
פורסם 2012 בפברואר 1813 שנים מחבר טוב עשיתי משהו אבל כרגע הספירה אחורה לא מוצגת בלייבל public void timer1_Tick(object sender, EventArgs e) { if (groupBoxSelect.Enabled == false) { if (nextFileDelay != null) { double delayForFile = nextFileDelay.nextFileIn; if (delayForPacket > 1) { labelStatus.Text = "Waiting for next file... " + "(" + (delayForPacket) + " milliseconds)"; } else { timer1.Stop(); } delayForFile--; } } }nextFileDelay זה אובייקט שלו יש 2 פרופרטיס:1. nextFileDelay זה פרופרטי מסוג bool שבעצם משתנה ל-true אם הקובץ הבא יגיע בעוד למעלה משנייה וככה אני נכנס לטיימר 2. nextFileIn - מסוג דבל (הוא סטטי) וככה כשהקובץ הבא יגיע בעוד למעלה משנייה אני מכניס אליו את הערך (למשל 2000 מילישניות) וככה הטיימר כשהוא קורא אותו הוא מקבל את הערך במילישניות מתי הקובץ הבא יגיע.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.