首页 新闻 会员 周边

请教:static静态方法中的new action用法

0
悬赏园豆:5 [已解决问题] 解决于 2021-06-02 12:01

请教各位大侠:

public class UpdateUI
{
    /// <summary>方法1
    /// 更新Button的文字
    /// </summary>
    /// <param name="button">Button对象</param>
    /// <param name="text">新文字</param>
    public static void ButtonText(Button button, string text)
    {
        button.Invoke( new Action(() => button.Text = text));
    }


    /// <summary>方法2
    /// 更新Button的背景色和文字
    /// </summary>
    /// <param name="button">Button对象</param>
    /// <param name="backcolor">新背景色</param>
    /// <param name="text">新文字</param>
    public static void ButtonTextColor(Button button, Color backcolor, string text)
    {
        button.Invoke ( new EventHandler(delegate {
            button.BackColor = backcolor;
            button.Text = text;
        }));
    }
}

如上是我创建的一个类,我在该类中创建了两个静态static的方法,并在方法里使用了 Invoke( new Action....和new EventHandler(delegate.....,我的初衷是更新button的按钮文字和颜色,如果我的这两个方法被调用上万次,是不是会出现创建了(new)上万个action和n eventhandler呢?如果是这样,如何避免这样的问题呢? 处于自学摸索阶段,请大神们指点,谢谢

rossi努力努力的主页 rossi努力努力 | 初学一级 | 园豆:8
提问于:2021-05-26 22:19
< >
分享
最佳答案
0

上万个Action就上万个呗,又占不了多少内存,也不会有什么GC压力,一般UI也不会一秒更新上万次,完全可以不考虑这个东西。
另外如果是我的话,我会封装成这个样子

public static class FormControlExtensionMethods
{
    public static void Invoke(this Control control, Action action)
    {
        control.Invoke(action);
    }
}

用的时候就这样

button.Invoke(() =>
{
    button.BackColor = color;
    button.Text = text;
});

就是覆盖掉他本身的Invoke方法,日常使用足够了

收获园豆:3
拓拓 | 小虾三级 |园豆:1050 | 2021-05-27 10:49
其他回答(1)
0
收获园豆:2
echo_lovely | 园豆:1433 (小虾三级) | 2021-05-27 08:18

感谢大侠的回复,请问,如果重复调用这些static方法,是否存在会创建很多acting和eventhandler的情况呢?

支持(0) 反对(0) rossi努力努力 | 园豆:8 (初学一级) | 2021-05-27 08:36

@rossi1984: 创建了就销毁了吧,因为他方法执行结束了,没有对他的引用的,会被GC掉

支持(0) 反对(0) echo_lovely | 园豆:1433 (小虾三级) | 2021-05-27 08:38

@rossi1984: 你可以测试下,循环调用几十万次,看看内存有没有平稳下来

支持(0) 反对(0) echo_lovely | 园豆:1433 (小虾三级) | 2021-05-27 08:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册