C# GUI在事件结束前不更新
我有一个gui,需要通过dll文件和文本框从硬件设备进行更新。我的问题是gui在事件结束之前不会更新,我需要显示一些暂停,然后显示其他内容。对Application.DoWork的攻击没有改变任何事情。有人有什么建议吗?我读到的所有内容都使用了invoke或DoEvents,但它们似乎都没有改变行为C# GUI在事件结束前不更新,c#,wpf,C#,Wpf,我有一个gui,需要通过dll文件和文本框从硬件设备进行更新。我的问题是gui在事件结束之前不会更新,我需要显示一些暂停,然后显示其他内容。对Application.DoWork的攻击没有改变任何事情。有人有什么建议吗?我读到的所有内容都使用了invoke或DoEvents,但它们似乎都没有改变行为 private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Ent
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
App.myMainWindow.image1.Visibility = Visibility.Hidden;
System.Windows.Forms.Application.DoEvents();
}
Thread.Sleep(4000);
}
查看此网页的开头部分如果使GUI线程睡眠,显然当其线程睡眠时无法更新GUI。创建一个单独的线程并使用更新UI元素(如果必须),您可以将该线程保存到睡眠状态,GUI仍将响应 编辑:
System.Windows.Forms.Application.DoEvents()代码>您确定WPF标记,是吗?我想在单击处理程序中启动它
这样,GUI将继续可用,并且可以显示进度。我按照vittore的建议,使用计时器解决了这个问题。这必须是这样做的,因为在GUI事件处理程序期间无法休眠GUI线程
public partial class MainWindow : Window
{
static Timer _timer;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.image1.Visibility = Visibility.Hidden;
this.image2.Visibility = Visibility.Visible;
_timer = new Timer(2000);
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true; // Enable it
}
}
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
textBox1.Dispatcher.Invoke(new Action(delegate()
{
_timer.Enabled = false;
this.image1.Visibility = Visibility.Visible;
this.image2.Visibility = Visibility.Hidden;
}));
}
如果它在同一个线程上,在我使GUI休眠之前,它不会被更新吗?我确实在启动时选择了WPF应用程序,而不是Windows窗体。这是人们所期望的,但事实并非如此,我不知道为什么…@haywire:您愿意解释一下这是如何回答您的问题的吗?