ShowDialogを、PropertyGridのとタイマー問題
-
09-09-2019 - |
質問
私は奇妙なバグを持っている、あなたはその理由についての手掛かりを持っているなら、私に知らせてくださいます。
私はまた、最終的にはメインフォームのUIを更新し、いくつかのアップデートを、発射する私のメインフォーム、上のTimer
(System.Windows.Forms.Timer
)を持っています。それから私はShowDialog()
メソッドを使用して、メインフォームから開かれたエディタを持っています。このエディタでは、私はPropertyGrid
(System.Windows.Forms.PropertyGrid
)を持っています。
私は毎回それを再現することができませんが、私はそれが立ち往生エディタでそのプロパティグリッド上のドロップダウンを使用した場合、かなり多くの場合、それはOKです/ボタンは、フォームを閉じないキャンセル、プロパティグリッドは、使用可能な、閉じるボタンではないとなりフォームヘッダーで動作しません。
があり、背景には例外はありません、と私はプロセスを破る場合、私はアプリは、私が最初に言及したアップデートに関連するいくつかの計算を行っていることがわかります。
あなたは何をお勧めすることができますか?すべてのアイデアは歓迎されています。
解決
何が起こっていることは、スレッドタイマーのティックメソッドは別のスレッドで実行していないということですので、それが行われるまで、それは他のすべてをロックしています。私は、イベントこれをしなかったことにタイマーと2つのボタンを持っていたテストのWinFormsアプリを作っます:
private void timer1_Tick(object sender, EventArgs e)
{
Thread.Sleep(6000);
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
frmShow show = new frmShow();
show.ShowDialog(); // frmShow just has some controls on it to fiddle with
}
あなたが説明するように実際にそれがブロックされました。以下は、それを解決します:
private void timer1_Tick(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(DoStuff);
}
private void DoStuff(object something)
{
Thread.Sleep(6000);
}
所属していません StackOverflow