【问题标题】:executing a function after a form has fully loaded在表单完全加载后执行函数
【发布时间】:2020-06-16 21:22:11
【问题描述】:

我有一个想在加载 Windows 窗体后运行的函数。该函数永远打印一个“lol”。但现在它中断了表单初始化,但如果我不把它放在 Form1 构造函数中,那么函数永远不会被调用并且永远不会运行。表单打开后有没有办法调用这个函数?

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            do_stuff_forever();
        }
        public void do_stuff_forever() {
            while (1 < 2) { Debug.WriteLine(" lol "); }
        }
    }

【问题讨论】:

  • 表单有 Load 事件。您可能希望在表单的加载事件处理程序中调用该方法。
  • 应该可以帮到你一点:stackoverflow.com/questions/218732/…
  • 只需使用 Timer 并在 OnShown 覆盖中启动它。
  • 在表单加载事件上调用它并在新线程上启动?

标签: c# winforms


【解决方案1】:

使用表单的 Shown() 事件使其在表单完全显示后运行……但无限循环仍将独占 UI 线程。将那段丑陋的代码放在不同的线程上以使其工作:

public Form1()
{
    InitializeComponent();
    this.Shown += (s, e) =>
    {
        Task.Run(() =>
        {
            while (1 < 2) {
                Debug.WriteLine(" lol ");
                System.Threading.Thread.Sleep(100); // optional?
            }
        });
    };
}

【讨论】:

    【解决方案2】:

    使用 Form_Load 事件并打开一个新线程,这样 UI 就不会卡住了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-14
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      相关资源
      最近更新 更多