c# - UI 按钮在单独的线程上运行?

标签 c# user-interface button interrupt

我的问题如下:

1.我有一个在 while 循环中更新 GUI 元素(图表)的强化方法

2.我需要在按下按钮时跳出这个循环。

3.问题是按钮事件处理程序在 while 循环完成之前不会执行。

4.我试过在单独的线程上运行该方法,但这是非常有问题的,因为它设置和读取许多 UI 元素,我几乎无法让它工作,所以我希望有一种方法在单独的线程上运行停止按钮并更新全局变量,让我跳出循环。

知道如何实现吗?

private void playBack(int playTime, int runUntil)
        {
            var frameTime = new DateTime(); var frameTime_ = new DateTime();

            bool fwd = true;
            if (runUntil < playTime) fwd = false;

            playTime = trPlay.Value;

            playGoStop = true;

            lbPlayTime.Text = (playTime * numDtStepSize.Value).ToString();

            while (true) //trPlay.Maximum + 1)
            {
                frameTime = DateTime.UtcNow;
                if ((frameTime - frameTime_).TotalMilliseconds > (double)(1000 / numFps.Value))
                {
                    systemUpdate(playTime);
                    trPlay.Value = playTime;
                    trPlay.Update();

                    lbPlayTime.Update();


                    frameTime_ = frameTime;
                    if (fwd)
                    {
                        playTime++;
                        if (playTime > runUntil) break;
                    }
                    else
                    {
                        playTime--;
                        if (playTime < runUntil) break;
                    }
                }
                if (!playGoStop) break;
            }
        }

最佳答案

在您的 while 循环中,您可以调用 Application.DoEvents()。它将从事件队列中获取 UI 事件,并处理这些事件。然后,将处理您的按钮事件。

您可以通过关键字 Application.DoEvents()C# 进行搜索。关于它的话题很多。

更新:

在您的代码中,它内部是一个无限循环。我不喜欢在主线程中无限运行。我更愿意在 worker-thread 中运行它。并发送消息以在主线程中执行 UI 更新。通常,UI 事件需要在主线程中处理。

如果无限 while 循环已经在 worker-thread 中,它应该在每个循环中休眠 5~10 ms,以便释放 CPU 资源来处理其他线程中的一些事件。

关于c# - UI 按钮在单独的线程上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31736491/

相关文章:

java - 使用模数和指数在 C# 中进行 RSA/ECB/PKCS1Padding 解密

javascript - History back() 方法返回两次

c# - 用具体类型覆盖抽象方法

c# - 直方图/柱形图不显示一直到底部的条形图

c# - 只读自动实现的属性是否可能?

android - 如何在android中实现这种按钮结构

java - 如何在Android项目中使用Java中的weightSum?

c# - 统一淡入场景无法正常工作

java - 在 Android 中将 OnClick 监听器添加到按钮的不同方法

asp.net - 可以 asp :Button with Visible=False be submitted by a malicious user?