Есть множество значений которые изменяются со временем. Если значение достигает определенного критического значения (у каждого оно свое), то нужно отобразить информационное окно (MessageBox). То есть одновременно может быть открыто N таких окон. Пока открыто хотя-бы одно из информационных окон основное окно должно быть заблокировано. После закрытия информационного окна новое может быть открыто не ранее чем через 5 минут.
На текущий момент есть не рабочая версия, запускается по таймеру.
private async void AlarmMaxAsync(object sender, EventArgs e)
{
if (IoDev.NumericC01RoiOil.Value >= 10)
{
if (Xceed.Wpf.Toolkit.MessageBox.Show("Бла", "Внимание!!!", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK)
{
await Task.Delay(50000);
}
}
if (IoDev.NumericC02RoiOil.Value >= 100)
{
if (Xceed.Wpf.Toolkit.MessageBox.Show("Бла бла", "Внимание!!!", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK)
{
await Task.Delay(50000);
}
}
if (IoDev.NumericC03RoiOil.Value >= 1000)
{
if (Xceed.Wpf.Toolkit.MessageBox.Show("Бла бла бла", "Внимание!!!", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK)
{
await Task.Delay(50000);
}
}
........
}
Просто как идея. Сделаем класс, который будет содержать все, что надо, для проверки и вывода сообщения
class PropertyCheckItem
{
public Func<int> Acessor { get; private set;}
public int MaxValue { get; private set;}
public string Message { get; private set;}
public PropertyCheckItem(string message, Func<int> acessor, int maxValue)
{
Message = message;
Acessor = acessor;
MaxValue = maxValue;
}
public bool Validate()
{
return !(Acessor() >= MaxValue);
}
}
Сделаем окно, где будет список таких классов, и этот список будем просто проверять в цикле
class MyWnd : Window
{
List<PropertyCheckItem> _propertyCheckers = new List<PropertyCheckItem>();
bool closed = false;
public MyWnd()
{
_propertyCheckers.Add(new PropertyCheckItem("Time in SECS more or equals 55!", ()=>DateTime.UtcNow.Second, 55));
_propertyCheckers.Add(new PropertyCheckItem("Height of window more or equals 500!", ()=>(int)this.Height, 500));
_propertyCheckers.Add(new PropertyCheckItem("Width of window more or equals 500!", ()=>(int)this.Width, 500));
this.Closed+= (sender, args) => closed = true;
this.Loaded+= (sender, args) => CheckPorps();
}
private async void CheckPorps()
{
while (!closed)
{
await Task.Delay(1000);
foreach (var item in _propertyCheckers)
{
if (closed) return;
if (!item.Validate())
{
if (System.Windows.MessageBox.Show(item.Message, "Caption", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) == MessageBoxResult.Yes)
{
await Task.Delay(2000);
}
}
}
}
}
}
Ну и, собственно, всё. Можно добавлять проверки на любое числовое свойство или как то ещё более кастомизировать проверки.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос: Есть 1 текстовый файл, в котором указаны пути файловВ списке нет разделителей типа ; или каких либо других
У меня есть директория (допустим string pathFile = P:\Database\new) , в которую нужно копировать файл, выбранный пользователемНачал писать:
При закрытии второй формы и повторном ее открытии вылетает ошибка с тем что Доступ к ликвидированному объекту не возможен?!? Раньше все норм...