moskitos פורסם 2012 בפברואר 28 Share פורסם 2012 בפברואר 28 יש לי תוכנת WPF שמריצה קבצים ואני משתמש ב-BackgroundWorker, לאחר שכל הקבצים מסתיימים אני רוצה להציג בלייבל מסויים שזה סיים ולכן ממש בסוף הלולאה של ההרצה אחרי שהכל מסתיים עידכנתי את הלייבל אבל אני מקבל את השגיאה הבאה:The calling thread cannot access this object because a different thread owns itניסיתי גם ליצור THREAD נפרד שקורה לפונקציה פשוטה שהיא מעדכנת את הלייבל אבל אני מקבל את אותה השגיאה, איך אפשר להתגבר על זה ? קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2012 בפברואר 29 Share פורסם 2012 בפברואר 29 תוצאה ראשונה בגוגל:http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcherבמשפט אחד - יש רק ת'רד אחד באפליקציה שיכול לעשות שינויים ב-UI. אם ת'רד אחר רוצה לעדכן את ה-UI, אז הוא צריך לשלוח הודעה לאובייקט מיוחד (Dispatcher) שדואג להפעיל את הפונקציה מתוך הת'רד הנכון. קישור לתוכן שתף באתרים אחרים More sharing options...
moskitos פורסם 2012 במרץ 3 מחבר Share פורסם 2012 במרץ 3 תודה רבה.ניסיתי את זה עכשיו וזה עובד אבל יש לךי בעיה אחרת, כאמור יש לי Listbox שאליה אני מכניס קבצים מסויימים, אם הקובץ הוא לא AVI אני ממיר אותו אוטומטי בעזרה תוכנה מסויימת אבל אממה, אני רוצה שאם אני מכניס קבצים שהם לא AVI אז בזמן שהתוכנה ממירה אותם אז יכתב לי בלייבל מסויים שהם כרגע מומרים לפורמט אחר, מה שקורה לי כרגע זה רק כאשר התוכנה סיימה להמיר אותם היא רושמת את זה למרות שאני מכניס את ה-thread (מהלינק שנתת לי) במקום הנכון: Stream checkStream = null; Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog(); openFileDialog.Multiselect = true; openFileDialog.InitialDirectory = "c:\\"; openFileDialog.Filter = "All files (*.*)|*.*"; openFileDialog.FilterIndex = 1; openFileDialog.Title = "Please Select Source File"; if ((bool)openFileDialog.ShowDialog()) { if ((checkStream = openFileDialog.OpenFile()) != null) { foreach (string file in openFileDialog.FileNames) { try { FileInfo fileInfo = new FileInfo(file); listBoxFiles.Items.Add(file); } catch (Exception ex) { MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); } } for (int i = 0; i < listBoxFiles.Items.Count; i++) { string path = (string)listBoxFiles.Items[i]; FileInfo fileInfo = new FileInfo(path); if (fileInfo.Extension != ".AVI") { listToRemove.Add(path); } } foreach (string file in listToRemove) { //System.Threading.Thread thread = new System.Threading.Thread( // new System.Threading.ThreadStart( // delegate() // { // lblStatus2.Dispatcher.Invoke( // System.Windows.Threading.DispatcherPriority.Norma l, // new Action( // delegate() // { // lblStatus2.Content = "Convert file to .AVI..."; // } // )); // } //)); //thread.Start(); FileInfo fileInfo = new FileInfo(file); editpcap = new (classes who convert the files)(fileInfo); listBoxFiles.Items.Add(editpcap._newFileName); } foreach (string file in listToRemove) //remove all non .avi files from listbox { listBoxFiles.Items.Remove(file); } } } else { }אגב סימנתי בהערה את ה-Thread שמעדכן את הלייבל (רק בשביל שיהיה קל לזהות אותו) קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.