2014-08-30 47 views
0

我试图做一个控制台应用程序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(); 
    } 
} 

编辑:

我正在做一个解释。用户可以将程序加载为文本文件。这些程序中的一部分可以包含绘制某些内容的命令写入控制台也是这些命令之一。当没有绘制任何东西时,显示表单不太合适。这就是为什么它是一个控制台应用程序

+0

你知道这个命令:应用程序。的DoEvents(); – 2014-08-30 10:41:43

+0

我刚刚尝试创建一个单独的线程,它只在无限循环中调用Application.DoEvents(),但窗体仍然没有响应 – symbiont 2014-08-30 10:53:51

+1

为什么要使控制台应用程序像WinForms应用程序一样工作?控制台应用默认没有消息泵,因此窗口被冻结。当然你可以添加一个,但为什么?你也不会说你为什么要这样做,也许告诉我们。如果你想要一个窗口制作一个WinForms应用程序 – MickyD 2014-08-30 11:44:28

回答

0

在您的解决方案上创建一个新的Windows窗体项目并添加您的窗体。

运行新的EXE文件用Proccess类

if (IsWindowsFormsAppRunning() == false) 
     System.Diagnostics.Process.Start(@"Path\windowsFormApp.exe"); 


private static bool IsWindowsFormsAppRunning() 
{ 
    //update this function 
    return false; 
} 

的许多方法来检查,如果一个应用程序已经在运行,一些简单的一些更高级的。 你会找到一种方法,这样做很容易,如果你检查此链接

https://www.google.gr/?gfe_rd=cr&ei=iAYCVLLQN-bc8gf6_IHoDA&gws_rd=ssl#q=c%23+check+if+application+is+running

+0

谢谢,我可能会与此。我将从控制台应用程序 – symbiont 2014-08-31 10:00:53

+1

中分离窗体,当时我提到了多个进程,我的意思是我的应用程序可以有多个实例(每个控制台的Form应用程序实例)以及控制台如何知道与哪个Form应用程序进行通信。但我现在已经明白了。我将使用TCP进行通信并使用表单应用程序的进程ID来决定该端口。控制台应用程序通过System.Diagnostics.Process.Id获知它 – symbiont 2014-08-31 10:01:12

相关问题