Обновить форму в winform C#
привет ребята,
Прямо сейчас я читаю из файла и генерирую некоторую статистику
ниже приведен код :
static FileSystemWatcher _watcher; static void Init() { //Adding a watcher to the following directory to know when there is a change. string directory = //path to directory"; MainPage._watcher = new FileSystemWatcher(directory); MainPage._watcher.Changed += new FileSystemEventHandler(MainPage._watcher_Changed); MainPage._watcher.EnableRaisingEvents = true; } static void _watcher_Changed(object sender, FileSystemEventArgs e) { //reload MainPage to update statistics. } private void MainPage_Load(object sender, EventArgs e) { OperationClass oc = new OperationClass(); oc.LoadFileForGenerationData(); List<string> username = oc.gettingUserData(); List<int> amountoftrn = oc.getAmountOfTrn(); fillChart(username, amountoftrn); //LABELS List<int> counters = oc.LoadFileForNumberOfErrors(); lblTotalNumberOfUsers.Text = username.Count().ToString(); lblTotalNumberOfTrns.Text = amountoftrn.Sum(x => Convert.ToInt32(x)).ToString(); lblErrors.Text = counters[0].ToString(); lblFatals.Text = counters[1].ToString(); lblWarnings.Text = counters[2].ToString(); //filestreamWatcher Init(); } private void fillChart(List<string> username, List<int> amountoftrn) { TransactionChart.Titles.Add("Transaction Chart"); // //name of user , number of transactions int i = 0; foreach (var uname in username) { TransactionChart.Series["Transactions"].Points.AddXY(username[i], amountoftrn[i]); i++; } }
Итак, у меня есть FileSystemWatcher в каталоге, поэтому, когда в этом каталоге произойдет изменение, я перезагрузлю mainform, чтобы метод _load снова запустился и статистика была обновлена.
--------------------------------------------------------------
ОБНОВЛЕНИЕ:
Я сделал новое обновление благодаря ДВ@Зи .
- Изменен метод filewatcher на нестатический
- сделал метод, поместил в него содержимое _load и вызвал его из _changed и _load
Новая проблема заключается в том, что когда я пытаюсь перезагрузить статистику, исключение ввода-вывода остается необработанным. это следующий код, в котором происходит сбой программы (в строке "using):
using (var filestream = new FileStream("//path to file.", FileMode.Open, FileAccess.Read,FileShare.None)) { MyTextFileDataSet.ContentExpression = new Regex(@"^(?<date>[^ ]+) (?<time>[^A-Z]+) (?<errorMessage>[^[]+) \[1\] (?<programName>[^.]+)[.](?<formName>[^.]+)[.](?<event>[^ ]+)[^a-z]+(?<username>[^:]+):(?<message>[^.]+).+$", RegexOptions.Multiline); MyTextFileDataSet.Fill(filestream); filestream.Flush(); //filestream.Close(); filestream.Dispose(); }
----------------------------------------------------------
Если есть какие-то проблемы или вы не поняли, не стесняйтесь комментировать.
Что я уже пробовал:
Я попробовал несколько методов, чтобы перезагрузить главную страницу (Я получил только 1 форму.)
Главная страница.ActiveForm.Распоряжаться()
MainPage frm = новая главная страница()
ФРМ.Показать()
---------
MainPage frm = новая главная страница()
frm.refresh(), перезагрузка.....
при попытке избавиться от исключения nullreference было дано исключение.. Может ли кто-нибудь сказать мне, что я могу сделать, или, может быть, есть обходной путь ?
-----------------------------------------------------------------
ОБНОВЛЕНИЕ ТОГО, ЧТО ВЫ ПРОБОВАЛИ:
Я попытался chnage файловый ресурс для ReadWrite, но затем возникает проблема, когда я пытаюсь войти в систему с помощью log4net из другого решения.
может быть, это может вам помочь, это приложение.config log4net.
<log4net> <root> <level value="DEBUG" /> <appender-ref ref="TestAppender" /> </root> <appender name="TestAppender" type="log4net.Appender.RollingFileAppender"> <lockingmodel type="log4net.Appender.FileAppender+MinimalLock"/> <param name="File" value="//same path of the filestream." /> <param name="AppendToFile" value ="true"/> <encoding value="utf-8" /> <rollingStyle value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %level [%thread] %type.%method %message%n" /> </layout> </appender> </log4net>
Кто-нибудь может сказать мне, что я могу сделать ?
---------------------------------------------------
FranzBe
Нет необходимости перезагружать всю форму целиком. Вам просто нужно обновить некоторые данные, которые отображаются в форме. Сделайте частный метод void ReloadStatistics (), поместите в него соответствующий код из события MainPage_Load. Вызовите новый метод из MainPage_Load() , а также из _watcher_changed().
Sigmond Gatt
пожалуйста , смотрите комментарий к решению 1, может быть, вы можете мне помочь, пожалуйста :)