タイマーを開始し、時間のかかる操作を実行し、その操作が行われている間、一定の間隔で進行状況バーを更新する単純なフォームがあります。現在、時間のかかる操作はSearchButton
. ただし、時間のかかる操作 (この場合はダウンロード) には数秒かかりますが、進行状況バーには何も起こりません。
public partial class Form1 : Form
{
System.Windows.Forms.Timer searchProgressTimer;
public Form1()
{
InitializeComponent();
this.searchProgressTimer = new System.Windows.Forms.Timer();
}
private void InitializeTimer()
{
this.searchProgressTimer.Interval = 250;
this.searchProgressTimer.Tick += new EventHandler(searchProgressTimer_Tick);
}
void searchProgressTimer_Tick(object sender, EventArgs e)
{
searchProgressBar.Increment(1);
if (searchProgressBar.Value == searchProgressBar.Maximum)
this.searchProgressTimer.Stop();
}
private void SearchDatabase_Click(object sender, EventArgs e)
{
this.searchProgressTimer.Start();
// Time-consuming operation
String filename = @"http://www.bankofengland.co.uk/publications/Documents/quarterlybulletin/qb0704.pdf";
WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri(filename), @"file.pdf");
int test;
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 100000; j++)
test = i + j;
this.searchProgressTimer.Stop();
}
}
(実際の時間のかかる操作はデータベース検索であるため、関数の名前は少し奇妙ですが、そのコードは正しく機能しますが、非常に長く複雑です)。
このコードをデバッグすると、SearchButton_Click
イベント ハンドラーが正しく起動することがわかりますが、コードがsearchProgressTimer_Tick
イベント ハンドラーにジャンプすることはありません。何か案は?