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