我试图做一个控制台应用程序2 Form类。每个表单只有一个实例,这就是为什么我要将实例存储在一个静态类中。如何显示表格并继续?
目标
- 它做了一些处理
- 在此期间,它可以创建和显示()表单,并立即继续处理(在此期间,它可以创建和显示()的另一种形式)
- 主函数通过调用表单的函数与窗体中的一个窗体进行交互
- 我期望应用程序简单地在主函数结束时结束/终止
问题
这几乎工程只是形式似乎是要“忙”与别的东西:
- 盘旋在它显示忙碌光标
- 我不能移动形式,也
尝试
- APPLICAT ion.Run(新Form1())似乎将控制交给窗体。但我希望它继续在主要功能(如我所说)。
代码
这里是使用2种形式1的例子:
主要功能:
using System.Threading;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// processing
FormData.form.InvokeDraw();
Thread.Sleep(10000); // simulate further processing
}
}
静态类:
class FormData
{
public static Form1 form;
static FormData()
{
form = new Form1();
form.Show();
}
}
形式:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void InvokeDraw()
{
pictureBox1.Invoke((MethodInvoker)Draw);
}
public void Draw()
{
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.FillEllipse(new SolidBrush(Color.Black), 0, 0, bmp.Width, bmp.Height);
}
pictureBox1.Image = bmp;
pictureBox1.Update();
}
}
编辑:
我正在做一个解释。用户可以将程序加载为文本文件。这些程序中的一部分可以包含绘制某些内容的命令写入控制台也是这些命令之一。当没有绘制任何东西时,显示表单不太合适。这就是为什么它是一个控制台应用程序
你知道这个命令:应用程序。的DoEvents(); – 2014-08-30 10:41:43
我刚刚尝试创建一个单独的线程,它只在无限循环中调用Application.DoEvents(),但窗体仍然没有响应 – symbiont 2014-08-30 10:53:51
为什么要使控制台应用程序像WinForms应用程序一样工作?控制台应用默认没有消息泵,因此窗口被冻结。当然你可以添加一个,但为什么?你也不会说你为什么要这样做,也许告诉我们。如果你想要一个窗口制作一个WinForms应用程序 – MickyD 2014-08-30 11:44:28