10分ごとにアプリがデスクトップのスクリーンショットを撮り、base64デコード形式でWebサービスを使用して送信する小さなwinformアプリを作成しました。
10 分ごとに起動するタイマー コントロールを使用し、バックグラウンド ワーカーを使用して、UI で最後に送信されたスクリーンショット時間を更新しました。
問題は、しばらくするとアプリがハングすることです。グーグルで調べたところ、Task Parallel ライブラリが長時間実行されるプロセスに適していることがわかりました。しかし、私はTPLについてあまり知りません。
アプリにTPLを実装する方法を教えてください。正しく効率的な方法を教えてください。
コードは
void timer1_Tick(object sender, EventArgs e)
{
timer1.Interval = 600000 ; //10mins
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new MethodInvoker(delegate { screenShotFunction(); }));
}
else
{
screenShotFunction();
}
}
private void screenShotFunction()
{
printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics graphics = Graphics.FromImage(printscreen as Image);
graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
mainSendFunction();
}
private void mainSendFunction()
{
try
{
//code for webservice and base64 decoding
}
catch (Exception)
{
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}