WPF-обновление NON UI-потоковых данных на основе статуса управления потоками UI
Я создал приложение wpf. Который имеет один флажок и две кнопки для времени запуска и остановки. После нажатия на кнопку запуска System.Timers.Timer aTimer запустится и вызовет метод checkboxstatus(), чтобы получить состояние флажка и показать его пользователю. Даже если флажок установлен, я получаю сообщение как False. Я использовал следующий код
public partial class MainWindow : Window
{
System.Timers.Timer aTimer = new System.Timers.Timer();
bool ischeckboxchecked = false;
public MainWindow()
{
InitializeComponent();
aTimer.Elapsed += new ElapsedEventHandler(senddata_Tick);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
aTimer.Interval = 3000;
aTimer.Start();
}
public string checkboxstatus()
{
string data = string.Empty;
ischeckboxchecked = false;
Dispatcher.BeginInvoke((Action)(() =>
{
if (checkBox1.IsChecked == true)
{
ischeckboxchecked = true; //value is updating on each timer tick
}
}));
data += ischeckboxchecked.ToString();
return data;
}
private void senddata_Tick(Object sender, EventArgs args)
{
string postdata = string.Empty;
postdata = checkboxstatus(); //every time am getting data as false
MessageBox.Show(postdata);
}
private void button2_Click(object sender, RoutedEventArgs e)
{
aTimer.Stop();
}
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
}
}
любой предлагает.......
1 ответ
Решение
Вы вызываете BeginInvoke
на диспетчере с вашим методом. BeginInvoke
немедленно возвращается. использование Invoke
вместо этого, чтобы получить блокирующий вызов и вернуться только после Dispatcher
операция завершена.