WPF根据UI线程控制状态更新NON UI线程数据

本文关键字:线程 UI NON 数据 更新 控制 根据 WPF 状态 | 更新日期: 2023-09-27 18:11:23

我已经创建了一个wpf应用程序。它有一个复选框和两个用于启动和停止定时器的按钮。单击启动按钮System.Timers.Timer aTimer将开始运行并调用方法checkboxstatus((以获取复选框状态并将其显示给用户。即使选中了复选框,我也会收到错误的消息。我使用了以下代码

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)
    {
    }
}

任何人建议。。。。。。。

WPF根据UI线程控制状态更新NON UI线程数据

您正在使用方法调用调度器上的BeginInvoke。CCD_ 2立即返回。改为使用Invoke来获取阻塞调用,并仅在Dispatcher操作完成后返回。