gpt4 book ai didi

C# Windows 窗体应用程序 : how to do something in background after the form has been loaded?

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:31 26 4
gpt4 key购买 nike

在我的 Windows 窗体应用程序中,我成功地运行了窗体:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

它有效。我已加载表格。

但是如果我在加载表单后循环执行某些操作,比如...

String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";

while (true)
{
using (StreamWriter writer = new StreamWriter(MyLog, true))
{
writer.Write("Hello");
}
Thread.Sleep(1000);
}

...表单正在关闭/崩溃。

我试图在表单的 Load 属性中指定一个特殊的事件处理程序,但它没有帮助:

这段代码有效(我写了一个字符串“Hello”并且表单是活的):

private void formLoad(object sender, EventArgs e)
{
String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";


using (StreamWriter writer = new StreamWriter(MyLog, true))
{
writer.Write("Hello");
}
Thread.Sleep(1000);

}

这段代码不起作用(我添加了一个循环)- 表单崩溃了:

   private void formLoad(object sender, EventArgs e)
{
String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";

while (true)
{
using (StreamWriter writer = new StreamWriter(MyLog, true))
{
writer.Write("Hello");
}
Thread.Sleep(1000);
}

}

我的问题是如何组织代码以便在加载表单后在后台执行某些操作?

最佳答案

如果你想做这样的事情,你可以使用 BackgroundWorker。但是有些事情你需要知道。首先,要设置它,您需要一个 private 类变量,并且需要在构造函数中放入一些代码:

private BackgroundWorker _worker = new BackgroundWorker();

::ctor
{
_worker.DoWork += DoBackgroundWork;

// we set this so you can cancel softly if necessary
_worker.WorkerSupportsCancellation = true;
}

然后你需要定义DoWork处理程序:

private void DoBackgroundWork(object sender, DoWorkEventArgs e)
{
String MyLog = Directory.GetCurrentDirectory() + "\\MyLog.txt";

while (!_worker.CancellationPending)
{
using (StreamWriter writer = new StreamWriter(MyLog, true))
{
writer.Write("Hello");
}
Thread.Sleep(1000);
}
}

注意我检查了 CancellationPending 属性以确保我们在必要时正常退出。稍后,如果您需要(例如,当您关闭表单时),请调用:

_worker.CancelAsync();

关闭它。

最后,要启动它,请调用:

_worker.RunWorkerAsync();

关于C# Windows 窗体应用程序 : how to do something in background after the form has been loaded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com