c#控制台应用程序,在旁边有一个显示实时数据的窗体

本文关键字:实时 数据 窗体 显示 有一个 控制台 应用程序 在旁边 | 更新日期: 2023-09-27 18:16:21

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

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

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

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

导致我的程序挂起在上面的行,没有进展到while循环,因为应用程序没有结束。

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

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

c#控制台应用程序,在旁边有一个显示实时数据的窗体

你正在阻塞你的主线程,这就是为什么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
    }
}