c# - 为什么在 Threading.Timer 中使用 Icon.FromHandle 设置 NotifyIcon.Icon 会导致内存泄漏?
问题描述
我将导致内存泄漏的代码行限制为以下从原始 Windows 应用程序获得的无用代码。
我已经知道当回调(或滴答事件)中的变量未正确处理时定时器导致内存泄漏的一般问题,这就是为什么我将两个“使用”部分放在我的函数中。我仍然看不到我没有管理的东西。
我考虑过定时轰炸,但即使我将 1000 毫秒设置为间隔,内存仍然会增加,直到出现内存异常。
块引用
class Program
{
private static bool locked {get; set; }
static void Main(string[] args)
{
System.Threading.Timer timer_log = new System.Threading.Timer(t_callback, null, 0, 100);
Application.Run();
}
private static void t_callback(Object state)
{
if (locked == false)
{
locked = true;
Leak.SetIcon();
locked = false;
}
}
}
static class Leak
{
private static NotifyIcon notifyIcon = new NotifyIcon();
static public void SetIcon()
{
using (Bitmap bitmapIcona = new Bitmap(Properties.Resources.LoggerServiceImg))
{
using (Graphics graphicsIcona = Graphics.FromImage(bitmapIcona))
{
notifyIcon.Icon = Icon.FromHandle(bitmapIcona.GetHicon());
}
}
}
}
块引用
解决方案
推荐阅读
- angular - 将 Angular 5 升级到 Angular 11
- opencv - OpenCV:为什么我在原始 Mat 上的断言失败,但在克隆的 Mat 上却没有?
- firebase - 使用 Firebase 触发器部署 Cloud Function 时出现部署错误
- python - 将浮点数转换为 datatime64[ns]
- java - 如何使用 jar 文件准备 docker image/container/dockerfile
- r - 在 R 中的函数中使用 JSON 字符串的信息
- python - 制作命令行登录应用程序,但似乎有错误
- amazon-s3 - 使用 Pentaho Data Integration CE 连接到 Minio S3
- json - django url参数创建过程中
- android - 如何在android中处理通知组