Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ObjectListView在SetObjects()上引发InvalidCastException_C#_.net_Objectlistview - Fatal编程技术网

C# ObjectListView在SetObjects()上引发InvalidCastException

C# ObjectListView在SetObjects()上引发InvalidCastException,c#,.net,objectlistview,C#,.net,Objectlistview,此异常是通过匿名错误跟踪系统报告的,因此我没有关于它的任何其他信息 System.InvalidCastException An object of type 'ListViewSubItem' cannot be converted to type 'BrightIdeasSoftware.OLVListSubItem'. BrightIdeasSoftware.OLVListItem in get_HasAnyHyperlinks within ObjectListView, Versio

此异常是通过匿名错误跟踪系统报告的,因此我没有关于它的任何其他信息

System.InvalidCastException 
An object of type 'ListViewSubItem' cannot be converted to type 'BrightIdeasSoftware.OLVListSubItem'.
BrightIdeasSoftware.OLVListItem in get_HasAnyHyperlinks within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in PostProcessOneRow within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in PostProcessRows within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in BuildList within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
BrightIdeasSoftware.ObjectListView in SetObjects within ObjectListView, Version=2.9.1.1072, Culture=neutral, PublicKeyToken=b1c5bf581481bcd4
你知道这是什么原因吗


编辑:据我所知,标记为重复的问题没有帮助。也许值得一提的是,我们只看到过一次这个异常,而有几百个用户。所以这似乎是一些边缘案例。

问题似乎出现在OLVListItem.cs中的
HasAnyHyperlinks

        /// <summary>
        /// Gets whether any cell on this item is showing a hyperlink
        /// </summary>
        public bool HasAnyHyperlinks {
            get {
                foreach (OLVListSubItem subItem in this.SubItems) {
                    if (!String.IsNullOrEmpty(subItem.Url))
                        return true;
                }
                return false;
            }
        }
因此,您可以通过将
UseHyperlinks
设置为false(如果没有)来避免此问题

或者,您可以在调用SetObjects的位置放置一个try/catch,然后再试一次(假设您的堆栈跟踪有一些您放弃的专有帧)

最后,
ObjectListView.PostProcessOneRow
是虚拟的,所以您可以通过对ObjectListView进行子类化并编写自定义实现来解决它(不过,我们可以讨论一下工程上的问题)

在复制/理解问题方面

OLVListItem
继承自
ListViewItem
SubItems
位于基类和public上。因此,如果有人以某种方式手动添加常规窗口
ListViewSubItems
,而不是olv-one(
OLVListSubItem
),则会导致此问题。可能需要检查代码是否没有引用该属性


如果不是的话,那么想必一些windows魔法会弄乱这个属性?他们运行的是什么windows版本,机器上有wierd软件吗?这种情况是一直发生还是只发生一次?

感谢您的关注。我在日志服务器上只看到一次此异常。因此,要么用户在应用程序崩溃后停止使用它,要么它只发生过一次。但是你有一点要提到windows版本。日志上写着
6.1.7601
,它对应于
Windows Server 2008 R2,Service Pack 1
!所以我们这里可能有些东西。这实际上是迄今为止唯一一个使用该操作系统版本的用户。没问题。我唯一的另一个想法是一个可访问性设置/工具或病毒,它正在通过windows API改变树中的内容。但似乎不太可能。
            if (this.UseHyperlinks && olvi.HasAnyHyperlinks) {
                PropagateFormatFromRowToCells(olvi);
                this.ApplyHyperlinkStyle(olvi);