c# - 从 Timer 调用 Paint 事件处理程序以更新表单控件
问题描述
我正在尝试为需要 3 个参数的计时器事件创建一个方法。我看过类似的问题并尝试实施所示的解决方案,但该解决方案在我的情况下不起作用
GraphDrawingTimer.Elapsed += new ElapsedEventHandler(GraphPainter);
GraphDrawingTimer.Interval = 350;
GraphDrawingTimer.Enabled = true;
上面是定时器初始化
static void GraphPainter(object sender, ElapsedEventArgs e)
{
//Show_Graph(c);
}
那是一旦定时器触发就会被调用的方法。
我想添加一个PaintEventArgs c额外参数来绘制图形。我正在使用
private void tabPage2_Paint(object sender, PaintEventArgs e)
方法,但按钮不会在我的标签页上刷新,这就是为什么我要创建自己的图形绘制方法,该方法将每 350 毫秒刷新一次。我努力了
GraphDrawingTimer.Elapsed += (object sender, ElapsedEventArgs e) => { GraphPainter(sender, e, c); };
GraphDrawingTimer.Interval = 350;
GraphDrawingTimer.Enabled = true;
......
static void GraphPainter(object sender, ElapsedEventArgs e, PaintEventArgs c)
{
Show_Graph(c);
}
但这不起作用。我收到错误“当前上下文中不存在名称'c'”。我也试过
PaintEventArgs c;
GraphDrawingTimer.Elapsed += (object sender, ElapsedEventArgs e)=> { GraphPainter(sender, e, c); };
GraphDrawingTimer.Interval = 350;
GraphDrawingTimer.Enabled = true;
......
static void GraphPainter(object sender, ElapsedEventArgs e, PaintEventArgs c)
{
Show_Graph(c);
}
我收到以下错误
错误 CS0165 使用未分配的局部变量“c”
这确实是有道理的,因为我没有为它分配任何值 - 那么如何为其分配一个值以PaintEventArgs c
传递 Paint 事件的正确参数?或者也许应该有其他方法来调用 Paint 事件?
解决方案
PaintEventArgs 这样可能无效。最好的选择是在要从计时器更新的控件上使用 .Invalidate() 方法,这将导致调用它们的绘制事件。
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.invalidate?view=net-5.0
这可能看起来像:
GraphDrawingTimer.Elapsed +=
(object sender, ElapsedEventArgs e) => MyGraphControl.Invalidate();
推荐阅读
- java - Spring Boot - application.properties 中的程序参数
- webcam - 如何使用分段输出文件在 DirectShow 中预览和捕获?
- networking - 如何确定 sctp 包中的块数?
- asp.net-mvc - 在 DataModel 中添加新表时 LINQ to Entities 查询
- maven - cli 的 GAE 成功,Cloud Build 的失败。错误:未找到
- c# - Xamarin Intent 空指针
- spring - Spring Boot WebClient.Builder bean 在传统 servlet 多线程应用程序中的使用
- python - 通过设置固定长度将列表转换为字典
- r - R 函数参数 - 我可以强制填充其中一个或另一个(但不能同时填充)吗?
- python - 使用 Python 有效地查找每个像素中的哪些点