質問:メソッドで作成されたScreenSaverFormを適切に破棄するにはどうすればよいShowScreensaver
ですか?
VisualStudioからCODEANALYSISを実行すると、次のように報告されますIn method 'Program.ShowScreenSaver()', call System.IDisposable.Dispose on object 'ssf' before all references to it are out of scope
。
アプリケーションがメソッドを終了した後に匿名メッセージループに入るため、その方法がわかりませんShowScreenSaver()
。Application.Exit()
mousemove-eventを呼び出すことでアプリケーションを停止できるのは、スクリーンセーバー自体だけです。screensaverFormsはおそらく自分自身を処分する必要がありますか?
static class Program
{
[STAThread]
static void Main(string[] args)
{
ShowScreenSaver();
Application.Run();
}
/// <summary>
/// Display the form on each of the computer's monitors.
/// </summary>
static void ShowScreenSaver()
{
ScreenSaverForm ssf;
foreach (Screen screen in Screen.AllScreens)
{
ssf = new ScreenSaverForm(screen.Bounds);
ssf.Show();
}
}
}
スクリーンセーバークラスの簡略化されたコード
public partial class ScreenSaverForm : Form
{
public ScreenSaverForm()
{
InitializeComponent();
//Display pretty image
ShowprettyImage();
}
private void ScreenSaverForm_MouseMove(object sender, MouseEventArgs e)
{
if (!mouseLocation.IsEmpty)
{
// Terminate if mouse is moved a significant distance
if (Math.Abs(mouseLocation.X - e.X) > 25 ||
Math.Abs(mouseLocation.Y - e.Y) > 25)
Application.Exit();
}
// Update current mouse location
mouseLocation = e.Location;
}
}