我已经创建了一个wpf应用程序。其中有一个复选框和两个按钮用于启动和停止计时器。单击开始按钮后System.Timers.Timer aTimer将开始运行并调用方法checkboxstatus()以获取复选框状态并将其显示给用户。即使复选框被选中,我也会将消息视为False。我用下面的代码WPF更新基于UI线程控制状态的非UI线程数据
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)
{
}
}
任何一个建议.......
您是否尝试使'ischeckboxchecked'字符串直接放入“true”或“false”? – Kilazur
已关闭。了解关于链接问题的回答,以了解WPF如何工作以及如何在多线程场景中正确使用WPF UI功能。 –
@HighCore不是重复的;在另一个问题中讨论的主题与本问题中提出的问题无关。如果它应该被标记为重复,那么应该附带一个广泛的评论,说明数据绑定在这里可能或不可能解决问题。 – Bas