我有一个控制台应用程序,它从数据库中获取实时数据,并实时对其进行操作,我的 Main 方法的大部分内容都在 while(true) 循环内。我需要在后台显示一个表单,它显示循环期间可用的数据的一部分。我希望每次程序完成一个显示新值的循环时它都会刷新。我已向我的项目添加了一个表单,并将以下代码添加到我的初始化部分:
DataDisplay dataDisplay = new DataDisplay();
dataDisplay.Show();
在主要声明之上。 这使得窗口弹出,但每当我将鼠标悬停在它上面时,我的光标就会变成 Microsoft 正在加载的蓝色圆圈。我的程序的其余部分运行良好,当前功能仍然存在,只是形式不满意。
的变体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
}
}
[在此处输入链接描述][1]
[块引用][2]
[1]: [2]:https://bobyboy
-
**List item**