שאלה קטנה ב-C#

פורום רשתות, IT ומחשוב כללי - רשתות, ראוטרים, מחשבים ניידים, אביזרים וכו'.
שלח תגובה
gshhar פותח השרשור
חבר פעיל במיוחד
חבר פעיל במיוחד
תגובות: 655
הצטרף: מאי 2007
נתן תודות: 0
קיבל תודות: 3 פעמים

שליחה #1 

יש לי תרגיל עם מולטי טרדינג, עכשיו אחרי שאני מפעיל את ה-Task שלי לאן אני מכניס את התוצאה ?

למשל ב-Task הזה שלי הוא מפעיל מתודה שמקבלת string ומחזירה SortedDictionary

קוד: בחירת הכל

Task task1= new Task(() => rec.GetFiles(new DirectoryInfo(path)));
הכוונה שלי היא איך אני קולט את מה שה-task עושה ?

osherov
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שליחה #2 

הנה לדוגמא איך עושים את זה:

קוד: בחירת הכל

class Test
{
public SortedDictionary<string, string> GetFiles&#40;DirectoryInfo dir&#41;
&#123;
SortedDictionary<string, string> openWith = new SortedDictionary<string, string>&#40;&#41;;
openWith.Add&#40;"txt", "notepad.exe"&#41;;
return openWith;
&#125;
&#125;

..............................
..............................
Test rec = new Test&#40;&#41;;
Task<SortedDictionary<string, string>> task1 = new Task<SortedDictionary<string, string>>&#40;&#40;&#41; => rec.GetFiles&#40;new DirectoryInfo&#40;"c&#58;\\"&#41;&#41;&#41;;

task1.Start&#40;&#41;;
task1.Wait&#40;&#41;;

SortedDictionary<string, string> retVal = task1.Result;
............

gshhar פותח השרשור
חבר פעיל במיוחד
חבר פעיל במיוחד
תגובות: 655
הצטרף: מאי 2007
נתן תודות: 0
קיבל תודות: 3 פעמים

שליחה #3 

אין לי את ה-result אחרי ה-tast
אין לי את המתודה הזו ב-task

osherov
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שליחה #4 

לא הבנתי מה אין לך?
תעלה אולי לכאן את כל הקוד הרלוונטי שלך

gshhar פותח השרשור
חבר פעיל במיוחד
חבר פעיל במיוחד
תגובות: 655
הצטרף: מאי 2007
נתן תודות: 0
קיבל תודות: 3 פעמים

שליחה #5 

הצלחתי תודה רבה !

osherov
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שליחה #6 

(Y)

אגב, יש עוד מספר דרכים לעשות את זה ב #C
תחשוב לדוגמא איך היית עושה את זה כאשר אתה רוצה להחזיר יותר מערך אחד

gshhar פותח השרשור
חבר פעיל במיוחד
חבר פעיל במיוחד
תגובות: 655
הצטרף: מאי 2007
נתן תודות: 0
קיבל תודות: 3 פעמים

שליחה #7 

עוד שאלה קטנה:

זה ה-MAIM שלי:

קוד: בחירת הכל

        static void Main&#40;string&#91;&#93; args&#41;
        &#123;
            Console.Write&#40;"enter path&#58; "&#41;;
            string path = Console.ReadLine&#40;&#41;;

            while &#40;path!="0"&#41;
            &#123;
                try
                &#123;

                    recursion rec = new recursion&#40;path&#41;;
                    Task<SortedDictionary<string, FileInfo>> getAllFilesTask = new Task<SortedDictionary<string, FileInfo>>&#40;&#40;&#41; => rec.GetFiles&#40;new DirectoryInfo&#40;path&#41;&#41;&#41;;
                    getAllFilesTask.Start&#40;&#41;;

                    Console.Write&#40;"enter word to search or bypass by pressing *&#58; "&#41;;
                    string word = Console.ReadLine&#40;&#41;;

                    if &#40;word != "*"&#41; 
                    &#123;
                        Task fineWordTask = new Task&#40;&#40;&#41; => rec.FindMatchingNames&#40;word&#41;&#41;;
                        fineWordTask.Start&#40;&#41;;
                        fineWordTask.Wait&#40;&#41;;
                    &#125;

                    Console.Write&#40;"enter path&#58; "&#41;;
                    path = Console.ReadLine&#40;&#41;;

                &#125;
                catch &#40;DirectoryNotFoundException&#41;
                &#123;
                    Console.WriteLine&#40;"path not found, please try again!"&#41;;
                    break;
                &#125;
            &#125;

            Console.ReadLine&#40;&#41;;
        &#125;
כפי שאתם רואים יש לי שם 2 TASK'ים

1 - getAllFilesTask - אחד מקבל מהיוזר PATH ומכניס לרשימה את כל הקבצים מה-PATH
2- fineWordTask - השני מקבל מהיוזר מילה מסויימת ומחפש את המילה או חלק ממנה ברשימה שה-TASK הראשון יצר ומדפיס את התוצאות שם נתקבלו

כרגע אחרי כל פעם שאני מכניס PATH ואת המילה לחיפוש הוא יש מדפיס לי את זה (ההדפסה נמצאת במתודה )

איך אני עושה שרק אחרי שאני אצא החוצה מה-MAIN יוצגו לי כל הקבצים מכל ה-TASK'ים ? ולא אחרי כל חיפוש וחיפוש ?

osherov
סמל אישי של משתמש
גורו Android
גורו Android
תגובות: 15029
הצטרף: אפריל 2007
נתן תודות: 201 פעמים
קיבל תודות: 513 פעמים

שליחה #8 

אתה יכול לפתור את זה על ידי זה שאתה מעביר פרמטר (אובייקט) נוסף לפונקציית ה TASK שלך. הנה דוגמא איך אתה מעביר אובייקט (by ref) מסוג StringCollection אותו תמלא בכל איטרצייה בפונקציית FindMatchingNames. אחרי שתסיים את כל האיטרציות שלך (ותצא מהלולאה הראשית שלך בפונקציית ה-Main). תוכל לבצע הדפסה של כל האלמנטים שהכנסת לתוך ה Collection (קראתי לו בדוגמא למטה strOutputStringArray)

קוד: בחירת הכל

StringCollection strOutputStringArray = new StringCollection&#40;&#41;;
while &#40;path!="0"&#41; 
&#123;
...............
Task fineWordTask = new Task&#40;&#40;&#41; => rec.FindMatchingNames&#40;word, strOutputStringArray&#41;&#41;;
................
&#125;

// Now you can print the strOutputStringArray collection.
&#125; close Main method scope.

.....
class Recursion&#123;
...... 
public void FindMatchingNames&#40;string word, StringCollection strOutputStringArray&#41;
&#123;
.....
strOutputStringArray.Add&#40;.....&#41;;
.....
&#125;
&#125;
אגב, שים לב שנהוג להתחיל שם של מחלקה (class) באות גדולה. לדוגמא לרשום Recursion ולא recursion

שלח תגובה

חזור אל “רשתות, אינטרנט ו- Fiber”