我是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);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,一旦Application.Run命令显示窗口,程序就会在此时停止.窗口启动时如何进行进一步处理?
以上只是一个例子.我的目的是读取XMl文件并显示datagridview.随后,我观察XMl文件的变化,每次进行更改时,我都想刷新datagridview.但是,一旦控制台弹出,我如何继续我的程序并动态更改表格上显示的信息?
C. *_*oss 10
之后发生的处理Application.Run通常在表单的Load事件处理程序中触发.Load通过双击窗体上的任何空白区域,可以在Visual Studio中轻松创建方法.
这看起来事情是这样的.
private void ReconcilerConsoleWindow_Load(object sender, EventArgs e)
{
if (CallSomeMethod())
{
this.SetLogText("True");
}
}
Run Code Online (Sandbox Code Playgroud)
这是(正如其他几个答案所述)的原因是主线程(被调用的线程Application.Run(window))现在用于操作表单的消息泵.您可以使用表单或表单的事件通过消息继续在该线程上运行.或者你可以开始一个新的主题.这可以在main方法中完成,然后调用Application.Run(window),但大多数人会Form_Load在表单构造函数中执行此操作,以确保表单设置等.一旦Application.Run返回,所有表单现在都关闭.