Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# GUI在事件结束前不更新_C#_Wpf - Fatal编程技术网

C# GUI在事件结束前不更新

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

我有一个gui,需要通过dll文件和文本框从硬件设备进行更新。我的问题是gui在事件结束之前不会更新,我需要显示一些暂停,然后显示其他内容。对Application.DoWork的攻击没有改变任何事情。有人有什么建议吗?我读到的所有内容都使用了invoke或DoEvents,但它们似乎都没有改变行为

    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:您愿意解释一下这是如何回答您的问题的吗?