【发布时间】:2016-11-03 14:24:33
【问题描述】:
我有一个控制台应用程序,它从数据库中获取实时数据,并对其进行实时操作,我的 Main 方法的大部分都在一个 while(true) 循环内。我需要一个在后台显示循环期间可用数据的一部分的表单。每次程序完成显示新值的循环时,我都希望它刷新。我在我的项目中添加了一个表单,并将以下代码添加到我的初始化部分:
DataDisplay dataDisplay = new DataDisplay();
dataDisplay.Show();
在 Main 声明之上。 这会使窗口弹出,但每当我将鼠标悬停在它上面时,我的光标就会变成 Microsoft 加载蓝色圆圈。我的程序的其余部分运行良好,当前功能仍然存在,只是形式不满意。
的变体Application.Run(dataDisplay);
dataDisplay.ShowDialog();
由于应用程序没有结束,导致我的程序挂在上面的行而不进入 while 循环。
我还没有开始构建填充表单的功能,因为它似乎不想表现出来。
我做错了什么,我对 C# 和 Winforms 都比较陌生。
【问题讨论】:
-
您必须使用
BackgroundWorker作为数据检索部分。如果我理解正确,你的主窗体中有一个无限循环,所以主线程很忙,不能在你的第二个窗体中绘制任何东西 -
没有理由使用 BGW,它已经过时了。使用 Task.Run 从表单内部运行长时间运行的作业,并使用
Progress<T>向表单发送消息 -
您可能会考虑写入控制台而不是表单。您可以写入窗口的特定区域,而不必让所有内容滚动。
-
好吧,如果您像我在某些项目中一样坚持使用 .net 3.5,则必须使用 BGW。但你是对的,最好使用 Task :)