WPF使用计时器重复操作

卢卡斯·克恩(Lucas Kern)

所以我是WPF的新手,我只是想编写一个简单的小程序。当您按下开始按钮时,它将连续打印伪代码,直到您按下停止按钮为止。我试图重复执行此操作,直到以10种不同的方式按下“停止”按钮,但没有一个起作用。TextBlock元素将更新一次(或永不更新),然后整个程序将无法使用,并且将出现加载光标。我猜想它不是在经历一个周期然后更新TextBlocks,而是在后台执行所有操作,而不是在视觉上进行更新。

 public partial class MainWindow : Window
{
    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();

    Random r1 = new Random();

    bool stop = false;
    int numUse

    public MainWindow()
    {
        InitializeComponent();


        dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
        dispatcherTimer.Start();

    }

    //Executes when the start button is hit, begins timer
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        do
        {
            dispatcherTimer.Tick += dispatcherTimer_Tick;
        } while (stop == false);
    }

    //Executes when the stop button is hit, ends timers do while loop
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        stop = true;
    }

    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {

            numUse = r1.Next(1, 2);

            if (numUse == 1)
            {
                CodeBlock1.Text = "struct group_info init_groups = { .usage = ATOMIC_INIT(2) }; ";
                CodeBlock2.Text = "";
                CodeBlock3.Text = "struct group_info *groups_alloc(int gidsetsize){ ";
                CodeBlock4.Text = "struct group_info *group_info; ";
                CodeBlock5.Text = "int nblocks; ";
                CodeBlock6.Text = "int i; ";
                CodeBlock7.Text = "";
                CodeBlock8.Text = "initialize stream";
            }
            else if (numUse == 2)
            {
                CodeBlock1.Text = "if (gidsetsize <= NGROUPS_SMALL) ";
                CodeBlock2.Text = "group_info->blocks[0] = group_info->small_block; ";
                CodeBlock3.Text = " else {  ";
                CodeBlock4.Text = " for (i = 0; i < nblocks; i++) { ";
                CodeBlock5.Text = "b = (void *)__get_free_page(GFP_USER);  ";
                CodeBlock6.Text = " goto out_undo_partial_alloc;  ";
                CodeBlock7.Text = "} ";
                CodeBlock8.Text = "";
            } else
            {

            }
    }



}

}

我尝试过使用不同的方法以不同的顺序进行循环。我了解我在走这些路线时可能会搞砸,因此就我而言,任何方法都可以。显然,在这种情况下,我正在使用计时器。

米奇

这是没有必要重复调用dispatcherTimer.Tick += dispatcherTimer_Tickwhile的循环Button_Click我怀疑在运行此循环时,消息泵上的其他任何东西都不会运行,包括来自的滴答声DispatcherTimer

您可以通过从代码中的任何位置调用stopDispatcherTimer直接取消操作,而仅对它们直接Stop()操作。

也许这是相反的:

public MainWindow()
{
    InitializeComponent();


    dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
    dispatcherTimer.Tick += dispatcherTimer_Tick; // set it up here

}

 //Executes when the start button is hit, begins timer
private void Button_Click(object sender, RoutedEventArgs e)
{
    dispatcherTimer.Start(); // start timer

}

//Executes when the stop button is hit, ends timers do while loop
private void Button_Click_1(object sender, RoutedEventArgs e)
{
    dispatcherTimer.Stop(); // stop timer
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Ruby中使用计时器重试

来自分类Dev

如何使用计时器重定向到上一个视图?

来自分类Dev

在vb中使用计时器

来自分类Dev

使用计时器移动PictureBox

来自分类Dev

使用计时器的内存泄漏

来自分类Dev

使用计时器限制提问

来自分类Dev

使用计时器逐行读取

来自分类Dev

在Spring Web应用程序中使用计时器跟踪用户操作

来自分类Dev

使用计时器将操作延迟几秒钟

来自分类Dev

Javascript倒数计时器重复并执行php代码

来自分类Dev

WPF使用计时器动态更改图像源

来自分类Dev

使用秒表的计时器setInterval / clearInterval将计时器重置为0

来自分类Dev

使用计时器在地图上放置标记

来自分类Dev

在C#中使用计时器实现循环

来自分类Dev

QML使用计时器移动文本

来自分类Dev

如何在字典中使用计时器

来自分类Dev

在Windows服务中使用计时器是否明智?

来自分类Dev

尝试使用计时器ping异常错误

来自分类Dev

使用计时器更新数据库

来自分类Dev

使用计时器逐渐旋转UIImageView

来自分类Dev

使用计时器测试Erlang函数性能

来自分类Dev

我无法使用计时器播放动画

来自分类Dev

MySQL-使用计时器更改行值

来自分类Dev

使用类属性启用/禁用计时器

来自分类Dev

使用计时器更改用户界面

来自分类Dev

在JTextArea中获得位置并使用计时器

来自分类Dev

在JS中使用计时器设置变量

来自分类Dev

这样使用计时器的目的是什么?

来自分类Dev

使用计时器将标记放置在地图上