gpt4 book ai didi

c# - Windows 应用程序在使用后台工作进程时被挂起

转载 作者:行者123 更新时间:2023-11-30 15:45:26 25 4
gpt4 key购买 nike

在我的应用程序中,我发送了更大的电子邮件 (> 2.5 Mb)。现在直到发送邮件,应用程序处于挂起状态(鼠标光标处于忙状态)。

我的一位 friend 建议使用“可以”显示类似“请稍候...正在发送电子邮件”之类的消息的后台工作程序。我不知道如何使用后台工作进程。请指导我

或者,如果有任何其他更快/更简单的选择,我将不胜感激

最佳答案

您不想使用单独的进程 - 您想要使用不同的线程

发送电子邮件的工作不应该在 UI 线程中完成,因为那样会阻止它更新。但是,您可能希望在发送电子邮件时禁用部分用户界面,具体取决于您的应用。

当谈到在后台处理电子邮件时,您可以明确地创建一个新线程,使用线程池,或者创建一个 BackgroundWorker .您可能想使用 Control.InvokeControl.BeginInvoke在发送电子邮件后将委托(delegate)调用编码回 UI 线程。就我个人而言,我可能会为此直接使用一个线程——听起来这需要一段合理的时间,我的猜测是你将无法报告有意义的进展(这是 BackgroundWorker 简化的主要任务) .编辑:根据评论,BackgroundWorker还会将异常编码到 UI 线程,您可能会发现这很有用。

所以像这样:

public void SendEmailButtonClicked(object sender, EventArgs e)
{
// Make any changes to the UI here to disable whatever you want
new Thread(SendEmail).Start();
}

private void SendEmail()
{
// Do the sending of the email here (this is in the non-UI thread)

// Then afterwards, possibly in a finally block
Action action = EmailSent;
this.BeginInvoke(action);
}

private void EmailSent()
{
// Back in the UI thread, do whatever you need to indicate
// success/failure, re-enable disabled parts of the UI etc
}

关于c# - Windows 应用程序在使用后台工作进程时被挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5235877/

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