C# 控制台应用程序,侧面有一个表单显示实时数据

问题描述 投票:0回答:2

我有一个控制台应用程序,它从数据库中获取实时数据,并实时对其进行操作,我的 Main 方法的大部分内容都在 while(true) 循环内。我需要在后台显示一个表单,它显示循环期间可用的数据的一部分。我希望每次程序完成一个显示新值的循环时它都会刷新。我已向我的项目添加了一个表单,并将以下代码添加到我的初始化部分:

DataDisplay dataDisplay = new DataDisplay();
dataDisplay.Show();

在主要声明之上。 这使得窗口弹出,但每当我将鼠标悬停在它上面时,我的光标就会变成 Microsoft 正在加载的蓝色圆圈。我的程序的其余部分运行良好,当前功能仍然存在,只是形式不满意。

的变体
Application.Run(dataDisplay);
dataDisplay.ShowDialog();

导致我的程序挂在上面的行上,而不会进入 while 循环,因为应用程序没有结束。

我还没有开始构建填充我的表单的功能,因为它似乎不想表现。

我做错了什么,我对 C# 和 Winforms 都比较陌生。

c# winforms
2个回答
1
投票

您正在阻塞主线程,这就是 gui 无法更新或对任何用户输入做出反应的原因。我建议将 while(true) 循环移至不同的线程。

这是一个简短的例子:

class MyForm : Form
{
    public Label label;

    public MyForm()
    {
        label = new Label();
        this.Controls.Add(label);
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyForm f = new MyForm();

        (new Task(() =>
        {
            //your loop
            while (true)
            {
                f.Invoke(new Action(() =>
                {
                    f.label.Text = (new Random()).Next().ToString();
                }));
                Console.WriteLine("working...");
                Thread.Sleep(500);
            }
        })).Start();

        f.ShowDialog(); //blocks as long as the form is open
    }
}

0
投票

[在此处输入链接描述][1]

[块引用][2]

[1]: [2]:https://bobyboy

-

**List item**

© www.soinside.com 2019 - 2024. All rights reserved.