Autor Beitrag
L4a-Thompson
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 19.12.16 18:26 
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

ausblenden volle Höhe C#-Quelltext
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:
ausblenden volle Höhe C#-Quelltext
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();
            }
        }

        //Konstruktor
        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; }
        }

        //Event startet wenn die Klasse Dispsoed ist
        void _worker_Disposed(object sender, EventArgs e)
        {
            //throw new NotImplementedException();
        }

        //Event startet wenn die Arbeit vollendet ist
        void _worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //throw new NotImplementedException();          
        }

        public void StartAsync()
        {
            _worker.RunWorkerAsync();
        }

        // Asyncron ausgeführte Methode    
        private void DoWork(object sender, DoWorkEventArgs e)
        {
            //Diese Rückgabewerte werden in der Klasse "ReturnValuesEventArgs : EventArgs" definiert
            var readLines = 0;
            string log_path = ZZZ.Utilitys.FS17_ErrorLog_Path;


            ZZZ.Utilitys_Data utilityData = new Utilitys_Data();
            DataTable dt = utilityData.FS_ErrorLogDataTable();
            //hier den Code zum abarbeiten eintragen
            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);
            }
            //Event Handler Aktualisiert bei jedem Durchgang die Daten der Gui
            var handler = FS17_ErrorLogReturnedValues;
            if (handler != null)
            {
                FS17_ErrorLogReturnedValues(thisnew 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 user profile iconTh69: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!