You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#委托实例化报错:提示需方法名及参数非空问题咨询

解决ListView跨线程设置图片的委托实例化错误

你遇到的错误是因为委托实例化的方式完全错误:

  • 委托类型SetImageListDataCallback的构造函数需要接收方法引用,而不是直接传入方法的参数值。你现在把imgName和i作为参数传给委托构造函数,编译器无法识别,才会抛出"method name expected"的错误。

修正后的代码

delegate void SetImageListDataCallback(string imgName, int i);

void SetImageListData(string imgName, int i)
{
    if (lvFoundModelImages.InvokeRequired)
    {
        // 正确写法:传入要执行的方法本身,而非参数
        SetImageListDataCallback c = new SetImageListDataCallback(SetImageListData);
        this.Invoke(c, new object[] { imgName, i });
    }
    else
    {
        // 优化:LargeImageList只需初始化一次,无需每次添加项都设置
        if (lvFoundModelImages.LargeImageList == null)
        {
            lvFoundModelImages.LargeImageList = imageList1;
        }
        lvFoundModelImages.Items.Add(new ListViewItem(imgName, i));
    }
}

额外优化说明

  • 委托实例化可以简化(C# 2.0及以上支持):直接写SetImageListDataCallback c = SetImageListData;,效果和完整写法一致。
  • 原代码中每次进入else分支都重复设置LargeImageList,属于冗余操作,添加判断只在未设置时赋值即可,或者直接在Form初始化时完成这个设置。

内容的提问来源于stack exchange,提问作者Muhammad Faizan Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:01:00