Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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# 文本框不显示文本,UI屏幕不移动_C#_Winforms - Fatal编程技术网

C# 文本框不显示文本,UI屏幕不移动

C# 文本框不显示文本,UI屏幕不移动,c#,winforms,C#,Winforms,这是我的要求,我必须在计时器内循环时使用,在启动应用程序后,单击按钮UI被锁定,无法移动,文本也不能在文本框中显示 下面是代码 using System; using System.Windows.Forms; namespace WinScreenLocked { public partial class Form1 : Form { public Form1() { InitializeComponent();

这是我的要求,我必须在计时器内循环时使用,在启动应用程序后,单击按钮UI被锁定,无法移动,文本也不能在文本框中显示

下面是代码

using System;
using System.Windows.Forms;
namespace WinScreenLocked
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int Number = 0;
        private void timer1_Tick(object sender, EventArgs e)
        {
            while (true)
            {
                textBox1.Text = Number.ToString();
                Number++;
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
    }
}

鉴于这是winforms,您可以使用Application.DoEvents()来处理UI刷新


请参见:

鉴于这是winforms,您可以使用Application.DoEvents()处理UI刷新

见此:

通常的警告是:计时器不会非常准确,可能需要GC.KeepAlive(计时器)

另见:

通常的警告是:计时器不会非常准确,可能需要GC.KeepAlive(计时器)


另请参见:

您可以停止线程以阻止ui,即使用

    System.Threading.Thread.Sleep(2000);

在2000毫秒以上所需的毫秒等于2秒。

您可以停止线程以阻止ui,即使用

    System.Threading.Thread.Sleep(2000);

在2000毫秒以上的情况下需要毫秒。毫秒等于2秒。

你的问题是什么?您正在UI的线程(主线程)中锁定UI。您需要创建一个不同的线程来处理控件的更改。如果更改不同线程中的控件,则需要在需要调用时调用该操作。下面是一个例子,如果你不想锁定用户界面。这篇文章中的代码似乎满足了这一要求——有一个无限循环可以冻结在计时器上启动的UI(假设您正确配置了计时器)。。。这个需求有点奇怪(很少听到让UI没有响应的请求)。。。但由于代码符合要求,所以不清楚您到底有什么问题?这是一个创建用于发布的示例项目,在实际项目中,计时器滴答事件中有while循环,而循环将循环,直到它从一个api获得值,所以在这段时间内,只有UI锁定您的问题是什么?您正在UI的线程(主线程)中锁定UI。您需要创建一个不同的线程来处理控件的更改。如果更改不同线程中的控件,则需要在需要调用时调用该操作。下面是一个例子,如果你不想锁定用户界面。这篇文章中的代码似乎满足了这一要求——有一个无限循环可以冻结在计时器上启动的UI(假设您正确配置了计时器)。。。这个需求有点奇怪(很少听到让UI没有响应的请求)。。。但由于代码符合要求,所以不清楚您到底有什么问题?这是一个创建用于post的示例项目,在实际项目中,计时器滴答事件中存在while循环,而循环将循环,直到它从一个api获得值,因此在此期间,只有UI被锁定订阅,对不起,忘了在这里添加。那么可能是因为您需要异步计时器,请检查此答案。如果您必须依赖API,那么您的程序将被冻结,直到收到API的响应为止。抱歉,忘记在此处添加。那么可能是因为您需要异步计时器,请检查此答案。如果您必须依赖API,那么您的程序将被冻结,直到收到API的响应为止