Threading.Timer を使用して 1 時間ごとにタスクを実行していますが、タイマーが刻むと、刻みで実行するコードを処理するときにアプリが常にクラッシュします。薄い全体をtry/catchに入れたとしても、例外や警告なしでクラッシュします。非常に奇妙な。以下は私のセットアップです。TextBox にアクセスしようとするとクラッシュするようですGrepCmdTextBox
が、書き込みではなく、別のスレッドからの読み取りは問題ないと思いました。
タイマーの設定:
var timeOfDay = DateTime.Now.TimeOfDay;
var nextHour = TimeSpan.FromHours(Math.Ceiling(timeOfDay.TotalHours));
var delta = (nextHour - timeOfDay).TotalMilliseconds;
System.Threading.Timer NextHourTimer = new System.Threading.Timer(new System.Threading.TimerCallback(NextHourTimer_Tick), null, (long)delta, (long)TimeSpan.FromHours(1).TotalMilliseconds);
ティック イベント:
private void NextHourTimer_Tick(object sender)
{
// If thread is not null and is busy, cancel and restart
if (MonitoringThread != null)
{
if (MonitoringThread.TailThread.IsBusy)
{
MonitoringThread.TailThread.CancelAsync();
System.Threading.Thread.Sleep(50);
// Get grep command, if specified
string optionalGrep = String.Empty;
if (GrepCmdTextBox.Text.StartsWith("grep") || GrepCmdTextBox.Text.StartsWith("egrep"))
optionalGrep = " | " + GrepCmdTextBox.Text;
MonitoringThread.TailThread.RunWorkerAsync(optionalGrep);
}
}
}