ユーザーが何らかの作業について通知する必要があるときにウィンドウを表示しようとしています。すべてがうまくいくと思いますが、私はフォームを絶対に一番上に表示したいと考えています。フォーム プロパティ TopMost = true を設定しましたが、機能しません。ウィンドウは他のフォームの背後に表示されたままです。
TopMost = true は BackgroundWorker でのみ機能しないことがわかりました。Timer クラスを使用すると正常に機能します。なぜだろう?誰でも私にこれを説明できますか?
これが私がやりたいことの簡単な例です。
static void Main(string[] args)
{
try
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
Application.Run(new Form());
}
catch (Exception exp)
{
Console.WriteLine(exp);
}
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
System.Threading.Thread.Sleep(1000);
if (NeedNotify())
{
NotifyForm myNotifyForm = new NotifyForm();
myNotifyForm.TopMost = true;
myNotifyForm.ShowDialog(); // NotifyForm still show behind others windows
}
}
}
private static bool NeedNotify()
{
return true;
}
}