我的表单启动后如何执行代码?

时间:2010-11-04 19:23:30

标签: c# winforms

我是Windows Forms编程的新手,并不太确定编程的正确方法。

这是我的困惑。

我有一个表格:

    public partial class ReconcilerConsoleWindow : Form
    {
        public ReconcilerConsoleWindow()
        {
            InitializeComponent();
            SetLogText("Started");

        }

        public void SetLogText(String text)
        {
            string logInfo = DateTime.Now.TimeOfDay.ToString() + ": " + text + Environment.NewLine;
            tbx_Log.AppendText(logInfo);
        }


    }

在我的Program.cs类中,我有以下代码:

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            ReconcilerConsoleWindow window = new ReconcilerConsoleWindow();
            Application.Run(window);

            if (CallSomeMethod() == true)
            {
                 window.SetLogText("True");
            }                     

        }


    }

现在,一旦Application.Run命令显示窗口,程序就会在此时停止。如何在窗口启动时进行进一步处理?

以上只是一个例子。我的目的是读取XMl文件并显示datagridview。随后,我观察XMl文件的更改,每次进行更改时,我都想刷新datagridview。但是,一旦控制台弹出,我如何继续我的程序并动态更改表格上显示的信息?

5 个答案:

答案 0 :(得分:10)

Application.Run之后的处理通常在表单的Load事件处理程序中触发。通过双击表单上的任何空白区域,可以在Visual Studio中轻松创建Load方法。

这样会看起来某事

    private void ReconcilerConsoleWindow_Load(object sender, EventArgs e)
    {
        if (CallSomeMethod())
        {
            this.SetLogText("True");
        }
    }

这是(正如其他几个答案中所述)的原因是主thread(调用Application.Run(window)的那个)现在用于操作表格的Message Pump 。您可以使用表单或表单的事件通过消息继续在该线程上运行。或者你可以开始一个新的主题。这可以在主方法 之前调用Application.Run(window)来完成,但大多数人会在Form_Load或表单构造函数中执行此操作,以确保表单已设置,等。Application.Run返回后,所有表单现已关闭。

答案 1 :(得分:3)

Application.Run启动Windows事件处理循环。该循环将无法完成,直到您的表单关闭,此时您对其执行的操作无论如何都无关紧要。

如果您想对表单执行某些操作,请在表单的Load事件处理程序中执行此操作。

答案 2 :(得分:2)

Program.cs并不意味着有业务规则,它应该只调用您的表单并显示它。所有数据网格加载/刷新/编辑都应在您的表单中完成。您应该使用Forms类上定义的事件,例如:OnLoad,OnUnload,OnClose和许多其他等。

答案 3 :(得分:1)

你错过了这个概念。在Windows窗体应用程序中,主线程负责运行表单。

您可以随时使用更多线程,但在Windows窗体中,我建议将BackgroundWorker组件用于并行任务: http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

或定时器: http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.aspx

答案 4 :(得分:0)

调用Application.Run(窗口)后,您将需要处理应用程序窗口内的后续内容。

在表单的代码视图中,找到以下内容(或添加它)

private void ReconcilerConsoleWindow_Load(object sender, EventArgs e)
{
//this is where you do things :)
            if (CallSomeMethod() == true)
            {
                 window.SetLogText("True");
            }
}