【问题标题】:How do I move onto the next line of code when an application is running?当应用程序运行时,如何移动到下一行代码?
【发布时间】:2020-06-08 04:29:31
【问题描述】:

我有一个应用程序 Form1 被调用以运行,然后是一个打印命令。一旦应用程序运行,代码似乎会暂停。

[STAThread]
public void Main()
{       
    System.Windows.Forms.Application.EnableVisualStyles();
    System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false);
    System.Windows.Forms.Application.Run(new Form1()); 
    Console.WriteLine("Test");  
}

在上述情况下,“测试”只有在我关闭 Form1 后才会写入。

如何让它在 Form1 应用程序打开时写入它? 换句话说,运行应用程序并继续执行代码。

更新:真正的逻辑存在于另一个类的另一个方法中。

class otherClass
{
        protected override void realMethod()
        {   

            var myForm = new Program();
            myForm.Main();

           //full logic to run while program is running
}

我希望 realMethod 中的逻辑在程序打开时运行。这可能吗?

【问题讨论】:

  • 我觉得这是一个XY问题。你到底想达到什么目的?不能把要运行的代码放到表单中吗?
  • 从您之前的帖子看来,您将 WinForms 应用程序视为控制台应用程序。 Console.WriteLine("Test"); 当然只有在应用程序(你刚刚用Application.Run() 启动的消息循环)终止时才会到达。您不能写入 Console,没有控制台,除非您创建一个。 Console.WriteLine() 写入 Visual Studio 中的输出面板,用于调试目的。
  • Sami 我更新了向您展示逻辑是如何运行的。
  • @jimi 对,这就是我调试的方式,这就是我发现应用程序运行时代码“暂停”的方式。我在此 OP 中添加了更多内容以进行更多说明。
  • 你有一个“模态对话框”。您正在寻找的是一个“无模式对话框”

标签: c# windows winforms printing


【解决方案1】:

但是,很难准确地确定您想要达到的目标。

一旦您的 WinForms 应用程序启动,它会将控制权交给 Form1,直到它完成工作,然后它会返回到您的 writeline 语句。您应该从 Form1 或其他由 Form1 触发的方法中调用 realMethod()。

在包含您要执行的代码的这一行中加载另一个表单而不是 Form1。

System.Windows.Forms.Application.Run(new Form1());

【讨论】:

  • realMethod() 中定义的变量是不断变化的,但是当 Form1 打开时,realMethod() 中的事件停止,(暂停)Form1 打开。如何同时打开 Form1 和 realMethod() 事件?
  • 如果没有关于你的程序在做什么的具体信息,更重要的是该方法在做什么,很难回答。通常,如果您希望一个方法在不影响 UI (Form1) 的情况下运行,您需要它使用 async/await 模式异步运行。 SO上有很多关于此的主题,因此我建议您搜索这些。
猜你喜欢
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-08
相关资源
最近更新 更多