C# BackgroundWorker在完成任务后冻结UI
后台工作人员在完成任务时冻结UI。我以前遇到过MessageBox无法关闭的问题(我在RunWorkerCompleted中遇到过),当我删除它时,程序开始冻结,cpu使用率将达到15%C# BackgroundWorker在完成任务后冻结UI,c#,winforms,C#,Winforms,后台工作人员在完成任务时冻结UI。我以前遇到过MessageBox无法关闭的问题(我在RunWorkerCompleted中遇到过),当我删除它时,程序开始冻结,cpu使用率将达到15% public Admin() { InitializeComponent(); DateTime newDate; DateTime now = DateTime.Now; newDa
public Admin()
{
InitializeComponent();
DateTime newDate;
DateTime now = DateTime.Now;
newDate = now.AddDays(-7);
var pathWithEnv = @"%userprofile%\Desktop\Zlecenia_Lavello\Spakowane_zlecenia_" + newDate.ToShortDateString() + "-" + now.ToShortDateString() + ".xlsx";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
if (!backgroundWorker1.IsBusy && !File.Exists(filePath))
{
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
DateTime today = DateTime.Today;
bool isLastDayOfTheMonth = (today.DayOfWeek == DayOfWeek.Monday);
ExportLastMonth(isLastDayOfTheMonth);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
DateTime today = DateTime.Today;
bool isLastDayOfTheMonth = (today.DayOfWeek == DayOfWeek.Monday);
while (isLastDayOfTheMonth == true)
{
}
}
void ExportLastMonth(bool isLast)
{
if (isLast == true)
{
DateTime newDate;
DateTime now = DateTime.Now;
newDate = now.AddDays(-7);
var pathWithEnv = @"%userprofile%\Desktop\Zlecenia_Lavello\Spakowane_zlecenia_" + newDate.ToShortDateString() + "-" + now.ToShortDateString() + ".xlsx";
var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
if (!File.Exists(filePath))
{
using MySqlConnection conn = new MySqlConnection(constring);
using (MySqlCommand cmd = new MySqlCommand("ALTER TABLE spakowane_zlecenia DROP id_zlecenia;ALTER TABLE historia_zlecen DROP id_zlecenia;INSERT INTO historia_zlecen SELECT * FROM spakowane_zlecenia; SELECT DATE_FORMAT(data_zlecenia, '%d.%m.%Y') as DATA, numer_zlecenia as NUMER, model as MODEL, uszkodzony as USZKODZONY, pracownik_odlewnia as ODLEWNIA, pracownik_szlifiernia as SZLIFIERNIA, pracownik_kontrolajakosci as 'KONTROLA JAKOSCI', pracownik_pakowanie as PAKOWANIE, etap_odlewnia as START, etap_pakowanie_end as KONIEC FROM spakowane_zlecenia;ALTER TABLE historia_zlecen ADD id_zlecenia int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;ALTER TABLE spakowane_zlecenia ADD id_zlecenia int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;", conn))
{
conn.Open();
using MySqlDataAdapter sqlda = new MySqlDataAdapter(cmd);
using DataTable dt = new DataTable();
sqlda.Fill(dt);
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dt, "Arkusz1");
wb.SaveAs(filePath);
using MySqlCommand cmd2 = new MySqlCommand("TRUNCATE spakowane_zlecenia;ALTER TABLE spakowane_zlecenia DROP id_zlecenia;ALTER TABLE spakowane_zlecenia ADD id_zlecenia int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;", conn);
cmd2.ExecuteNonQuery();
}
}
}
}
}
我希望在程序启动时将其导出,并在已创建文件的下一次运行时不执行任何操作。更正此部分:
bool isLastDayOfTheMonth = (today.DayOfWeek == DayOfWeek.Monday);
while (isLastDayOfTheMonth == true)
{
}
它每周一循环一次
顺便说一句,如果你有一个bool,比如
islastdayofmonth
,你不需要将它与另一个bool进行比较就可以得到bool结果
if(isLastDayOfTheMonth == true)
与相同
if(isLastDayOfTheMonth)
是的,但好消息是它只会在Mondays@CaiusJard不要撒谎,这是好的观点每天工作的事情的缺点,但周一是,你可能在周二写它,在周三测试和调试它,在周四完成它的QA测试,并在周五下午晚些时候部署它。然后,当你周一早上第一件事开始工作时,你会惊讶于有多少用户注意到了。@Flydog57它只是将数据从数据库导出到excel,我通过更改系统日期来测试它