Hallo zusammen, ich habe in meiner Gui folgenden Code.
weiter unten kommt die klasse die dann den asynchronen Teil ausführen soll.
Normalerweise funktioniert dieses konstrukt aber beim einlesen von textfiles friert mir die gui ein und er kann die daten nicht mehr an die form übergeben.
bei FS17_ErrorLogReturnedValues kommt zwar die Datatable mit den Daten an aber er hängt sich beim invoke auf.
Was mache ich falsch? könnt ihr mir helfen?
Es ist für den FS Mod Manager 5 auf Modhoster. den Source kann ich gerne mit anhängen
Es ist der Tab mit "Spiel Fehler Log".
Ein Hinweis noch bei Dateien kleiner 5MB friert die Form zwar ein aber er übergibt die Werte an das DataGrid.
mfg
Thompson
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| private void LoadErrorLogAsync() { ErrorLog_Datatable.Clear(); MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Visible = true; MainForm_ErrorLogTab_LoadErrorLogFile_pictureBox.Enabled = false; MainForm_ErrorLogTab_LoadErrorLogFile_pictureBox.Image = Properties.Resources.RefreshCancel; MainForm_ErrorLogTab_showAllErrors_radioButton.Checked = true; ErrorLog_DataView_RowFilter("*"); MainForm_ErrorLogTab_ErrorLog_dataGridView.Refresh();
if (MainForm_ErrorLogTab_SelectGame_comboBox.Text == ZZZ.Utilitys.whichGame.FarmingSimulator2017.ToString()) { if (File.Exists(ZZZ.Utilitys.FS17_ErrorLog_Path)) { FileInfo fi = new FileInfo(ZZZ.Utilitys.FS17_ErrorLog_Path); MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Maximum = (int)fi.Length; ZZZ.FS17_LoadErrorLogAsync asyncJob = new ZZZ.FS17_LoadErrorLogAsync(); asyncJob.FS17_readErrorLogCompleted += FS17_readErrorLogCompleted; asyncJob.FS17_ReadErrorLogProgressChanged += FS17_ReadErrorLogProgressChanged; asyncJob.FS17_ErrorLogReturnedValues += FS17_ErrorLogReturnedValues; asyncJob.StartAsync(); } } }
private void FS17_ErrorLogReturnedValues(object sender, ZZZ.FS17_ReturnValuesReadErrorLogEventArgs e) { var returned_DataTable = e.ErrorLog_DataTable; if (MainForm_ErrorLogTab_ErrorLog_dataGridView.InvokeRequired) { MainForm_ErrorLogTab_ErrorLog_dataGridView.Invoke((MethodInvoker)delegate { ErrorLog_Datatable = returned_DataTable; ErrorLog_DataView = returned_DataTable.DefaultView; MainForm_ErrorLogTab_ErrorLog_dataGridView.DataSource = ErrorLog_DataView; MainForm_ErrorLogTab_ErrorLog_dataGridView.Refresh(); }); } else { } } private void FS17_ReadErrorLogProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) { var percent = e.ProgressPercentage; MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Value = percent; } private void FS17_readErrorLogCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; worker.Dispose();
MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Value = MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Maximum; MainForm_ErrorLogTab_LoadErrorLogFile_pictureBox.Enabled = true; MainForm_ErrorLogTab_LoadErrorLogFile_pictureBox.Image = Properties.Resources.Refresh; MainForm_ErrorLogTab_LoadLogFileProgress_textProgressBar.Visible = false; } |
Und in einer anderen form habe ich eine klasse welche mir die Textdateien einließt:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119:
| public class FS17_LoadErrorLogAsync { BackgroundWorker _worker; bool _cancel = false;
public bool CancelWork { get { return _cancel; } set { _cancel = value; _worker.CancelAsync(); } }
public FS17_LoadErrorLogAsync() { _worker = new BackgroundWorker(); _worker.WorkerSupportsCancellation = true; _worker.WorkerReportsProgress = true; _worker.DoWork += DoWork; _worker.RunWorkerCompleted += _worker_RunWorkerCompleted; _worker.Disposed += _worker_Disposed; }
public event EventHandler<FS17_ReturnValuesReadErrorLogEventArgs> FS17_ErrorLogReturnedValues;
public event ProgressChangedEventHandler FS17_ReadErrorLogProgressChanged { add { _worker.ProgressChanged += value; } remove { _worker.ProgressChanged -= value; } }
public event RunWorkerCompletedEventHandler FS17_readErrorLogCompleted { add { _worker.RunWorkerCompleted += value; } remove { _worker.RunWorkerCompleted -= value; } }
void _worker_Disposed(object sender, EventArgs e) { }
void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { }
public void StartAsync() { _worker.RunWorkerAsync(); }
private void DoWork(object sender, DoWorkEventArgs e) { var readLines = 0; string log_path = ZZZ.Utilitys.FS17_ErrorLog_Path;
ZZZ.Utilitys_Data utilityData = new Utilitys_Data(); DataTable dt = utilityData.FS_ErrorLogDataTable(); try { if (File.Exists(log_path)) { int counter = 1; string log_file_string = string.Empty; using (StreamReader file = new StreamReader(log_path)) { string lastMain = string.Empty; while ((log_file_string = file.ReadLine()) != null) { readLines += log_file_string.Length;
if (!log_file_string.StartsWith(" ")) { lastMain = log_file_string; dt.Rows.Add(counter, lastMain); } else { dt.Rows.Add(counter, lastMain + " " + log_file_string); } counter++; _worker.ReportProgress((int)readLines); } } } } catch (Exception ex) { throw new Exception("Fehler beim Laden des Mod Verzeichnises,\r\n. Probleme bei folgender Datei: ", ex); } var handler = FS17_ErrorLogReturnedValues; if (handler != null) { FS17_ErrorLogReturnedValues(this, new FS17_ReturnValuesReadErrorLogEventArgs(dt)); } } }
public class FS17_ReturnValuesReadErrorLogEventArgs : EventArgs { public DataTable ErrorLog_DataTable { get; private set; }
public FS17_ReturnValuesReadErrorLogEventArgs(DataTable _myDataTable) { ErrorLog_DataTable = _myDataTable; } } |
Moderiert von Th69: C#-Tags hinzugefügt