【发布时间】:2017-01-30 01:17:24
【问题描述】:
在我的 C# WindowsForm 应用程序中,我尝试使用固定持续时间(在我的情况下为 6500 毫秒)从头到尾为进度条设置动画。这大致是 SQL 执行所需的时间。
我尝试在执行 SQL 之前运行 animate 方法,但是在执行 SQL 时,似乎认为整个线程都被冻结了。我不想在出现异常的情况下异步运行 SQL。
我是多线程和后台工作进程的新手,虽然我相信这可能是关键?
如果有人能引导我朝着正确的方向前进,将不胜感激!
private void btnInternalMovement_Click(object sender, EventArgs e)
{
AnimateProgBar(6500);
// ***** BLAH MORE CODE HERE ******
using (SqlCommand cmd = new SqlCommand("CatamacInternalStockMovement_C", SqlConnection))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ItemName", items);
cmd.Parameters.AddWithValue("@Quantity", quantities);
cmd.Parameters.AddWithValue("@WarehouseFrom", cbxFromWarehouse.SelectedValue.ToString());
cmd.Parameters.AddWithValue("@WarehouseTo", cbxToWarehouse.SelectedValue.ToString());
cmd.Parameters.AddWithValue("@LocationFrom", cbxFromZone.SelectedValue.ToString());
cmd.Parameters.AddWithValue("@LocationTo", cbxToZone.SelectedValue.ToString());
cmd.Parameters.AddWithValue("@UOM", "Each");
cmd.Parameters.AddWithValue("@TransferDate", DateTime.Now);
cmd.Parameters.AddWithValue("@User", User);
cmd.ExecuteNonQuery();
}
// PROGRESS BAR ONLY STARTS ANIMATING HERE
MessageBox.Show("Success!");
}
这里是计时器/动画方法的代码。
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Value < 100)
{
progressBar1.Value += 1;
progressBar1.Refresh();
}
else
{
timer1.Enabled = false;
}
}
public void AnimateProgBar(int milliSeconds)
{
if (timer1.Enabled) return;
progressBar1.Value = 0;
timer1.Interval = milliSeconds / 100;
timer1.Enabled = true;
}
【问题讨论】:
-
您需要使用后台线程或
await。 -
在我回答之前,先检查一下您是否使用 .NET 4,对吧?
-
更新了标签,这个特定的应用程序正在运行 .NET 4.5
标签: c# multithreading winforms .net-4.5 backgroundworker