C# 有一个带按钮的主窗体,然后想在新窗体中启动BackgroundWorker,当按钮被单击时?对于再次出现的混乱,我感到非常抱歉。我有一个包含很多其他代码的主窗体。最初,用户以xml格式从数据库API调用数据,然后给出一些不同的条件来处理数据,最后,当他/她
C# 有一个带按钮的主窗体,然后想在新窗体中启动BackgroundWorker,当按钮被单击时?对于再次出现的混乱,我感到非常抱歉。我有一个包含很多其他代码的主窗体。最初,用户以xml格式从数据库API调用数据,然后给出一些不同的条件来处理数据,最后,当他/她,c#,.net,winforms,C#,.net,Winforms,有一个带按钮的主窗体,然后想在新窗体中启动BackgroundWorker,当按钮被单击时?对于再次出现的混乱,我感到非常抱歉。我有一个包含很多其他代码的主窗体。最初,用户以xml格式从数据库API调用数据,然后给出一些不同的条件来处理数据,最后,当他/她单击create按钮时,调用一个符合用户条件的所需方法。在这里,我只需要显示该方法的进度,单击按钮后将调用该方法。无需道歉。我将根据更新更新我的答案:-)非常感谢您的帮助。在这两者之间,我将试着玩它,试着学习更多和一些新的东西。每当我遇到问题时
有一个带按钮的主窗体,然后想在新窗体中启动BackgroundWorker,当按钮被单击时?对于再次出现的混乱,我感到非常抱歉。我有一个包含很多其他代码的主窗体。最初,用户以xml格式从数据库API调用数据,然后给出一些不同的条件来处理数据,最后,当他/她单击create按钮时,调用一个符合用户条件的所需方法。在这里,我只需要显示该方法的进度,单击按钮后将调用该方法。无需道歉。我将根据更新更新我的答案:-)非常感谢您的帮助。在这两者之间,我将试着玩它,试着学习更多和一些新的东西。每当我遇到问题时,这是一种学习新东西的奇妙感觉。它非常有效。谢谢你这么好的方法。我只是在调用它的地方加了一部分。如下<代码>动作动作=()=>xmlconvert_1()代码>
RunWithMargueProgress(操作,toolStripProgressBar)代码>它工作得很好。谢谢你这么好的方法。我只是在调用它的地方加了一部分。如下<代码>动作动作=()=>xmlconvert_1()代码>RunWithMargueProgress(操作,toolStripProgressBar)代码>
Task.Factory.StartNew(() => xmlconvert(xx, yy));
private void btnCreateRelease_Click(object sender, EventArgs e)
{
// Checks set of conditions
if(cond 1)
{
xmlconvert_1();
}
else if (cond2)
{
xmlconvert_2();
}
else if (cond3)
{
xmlconvert_3();
}
else if (cond4)
{
xmlconvert_4();
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
void Form1_Shown(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Do your work in here.
xmlconvert(xx, yy);
for (int i = 0; i <= 100; i++)
{
backgroundWorker1.ReportProgress(i);
System.Threading.Thread.Sleep(100);
}
}
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
}
public static class ActionExtensions
{
public static void RunWithMargueProgress(this Action action)
{
var progressForm = new ProgressForm();
progressForm.Show();
Task.Factory.StartNew(action)
.ContinueWith(t =>
{
progressForm.Close();
progressForm.Dispose();
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
private void button_Click(object sender, EventArgs e)
{
Action action = () => Thread.Sleep(5000);
action.RunWithMargueProgress();
}
public static void RunWithMargueProgress(this Action action, ToolStripProgressBar progressBar)
{
progressBar.Style = ProgressBarStyle.Marquee;
progressBar.MarqueeAnimationSpeed = 30;
Task.Factory.StartNew(action)
.ContinueWith(t =>
{
progressBar.MarqueeAnimationSpeed = 0;
progressBar.Style = ProgressBarStyle.Continuous;
}, TaskScheduler.FromCurrentSynchronizationContext());
}
private void button_Click(object sender, EventArgs e)
{
Action action = () => Thread.Sleep(5000);
action.RunWithMargueProgress(ToolStripProgressBar);
}