У меня есть событие FileSystemWatcher_Changed
, в котором я хочу проверить, изменилось ли состояние какого-либо из элементов управления в форме.Затем я хочу обновить файл JSON, чтобы что-то изменилось.
Проблема заключается в том, что при попытке проверить изменение с помощью Dispatcher внутри измененного события я получаю исключение:
Метод синхронизации объектов был вызван из несинхронизированного блока кода.
Я ссылался на этот пост, но не смог получить информацию, касающуюся моего дела. Метод синхронизации объектов из несинхронизированного блока.
private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
try
{
//Deserialize, check length, if len >1 then check both are inactive and if both are inactive then only lock
//var root = JsonConvert.DeserializeObject<Root>(wc.GetFullJsonText());
var root = JsonConvert.DeserializeObject<Root>(wc.GetFullJsonText());
if (root != null && root.AllApplications != null)
{
var item = root.AllApplications.Any(x => x.Status == ActivityStatus.Active.ToString());
if (!item)
{
if (InActivecount == 0)
{
Program.IdleTimer.Tag = InActivityTimer.Ended;
//MessageBox.Show("I am hiding because Main App is InActive");
this.Invoke((MethodInvoker)delegate //I think this is causing an issue.
{
CheckChanged();
});
this.Hide();
}
InActivecount++;
}
else
{
if ((InActivityTimer)Program.IdleTimer.Tag == InActivityTimer.Ended)
{
this.Show();
UnRegister(sender as FileSystemWatcher);
UpdateActivityStatus();
Program.StartInActivityMonitor();
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.InnerException.ToString());
}
}
private void CheckChanged()
{
foreach(var item in this.Controls)
{
if(item is TextBox)
{
control = item;
(control as TextBox).TextChanged += Form1_TextChanged;
}
}
}
private void Form1_TextChanged(object sender, EventArgs e)
{
wc.AddStatusToGeneStudy(true);
(control as TextBox).TextChanged -= Form1_TextChanged;
}