Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 为什么DevExpress树列表定期抛出隐藏异常?_C#_.net_Winforms_Exception Handling_Devexpress - Fatal编程技术网

C# 为什么DevExpress树列表定期抛出隐藏异常?

C# 为什么DevExpress树列表定期抛出隐藏异常?,c#,.net,winforms,exception-handling,devexpress,C#,.net,Winforms,Exception Handling,Devexpress,我一直在处理代码,很好奇为什么它会抛出一个DevExpress.Utils.HideException 我的理解是,异常非常昂贵,应该谨慎使用,并且只能在某些情况下使用,但下面的代码snippit表明,我们总是抛出HideException,而不会触发任何特定事件或代码 从FilterTreeList.cs 他们为什么在这里抛出一个隐藏异常,它有什么好处呢?我想说这是 虫子 用于向调用Response.Redirect将引发ThreadAbort异常以停止所有代码执行的方式发送消息 在我看来,他

我一直在处理代码,很好奇为什么它会抛出一个
DevExpress.Utils.HideException

我的理解是,异常非常昂贵,应该谨慎使用,并且只能在某些情况下使用,但下面的代码snippit表明,我们总是抛出
HideException
,而不会触发任何特定事件或代码

FilterTreeList.cs
他们为什么在这里抛出一个隐藏异常,它有什么好处呢?

我想说这是

  • 虫子
  • 用于向调用Response.Redirect将引发ThreadAbort异常以停止所有代码执行的方式发送消息

  • 在我看来,他们正在使用异常来控制程序流。文档中有人注意到它会阻止基类方法被调用。那太可怕了。.NET framework实现这一点的方法是HandledMouseEventArgs类,由OnMouseWheel()使用。

    它是一种程序流机制,用于清除控件的环境。尽管与普通代码相比,异常确实是昂贵的(原型示例是在将字符串转换为int的循环中使用FormatExceptions——因此需要TryParse类型的方法),但与UI中的主要更改、从数据库获取数据等相比,异常非常便宜,易于维护

    您引用的演示代码就是这样一个场景:控件即将刷新其全部内容。最终用户点击了一个特定的图标来执行一个特定的操作——根本不会“总是”抛出异常。我对这个示例代码的唯一不满之处(我强调它是示例代码)是操作是在鼠标按下时完成的,而不是在鼠标上升时完成的

    我想争论的焦点是“异常是否可以用于这种宏程序流,或者我们是否应该制定一个严格的规则,规定它们只能用于错误报告?”但这是另一个问题

    更新


    WinForms团队告诉我:

    HideException
    是用于阻止默认鼠标事件处理的内部异常。我们同意这是一种老式的停止代码执行的方法,特别是考虑到我们已经有了
    DXMouseEventArgs
    ,能够设置
    e.Handled=true
    。不幸的是,XtraTreeList当前不完全支持
    DXMouseEventArgs
    。我们将在下一个次要版本中添加此功能,并相应地更新E2474示例


    因此,在一个月左右的时间内,它将引起考古界的兴趣。

    示例代码是由DevExpress开发人员提交的吗?如果是这样,就让他们知道他们没有通过互联网代码审查(grin)。总而言之,您的支持和产品给我留下了深刻的印象,您(DevExpress团队)经常光顾Stack Overflow让我有一种+1的感觉。我相信这是DevExpress团队提交的。我很想听听他们的推理,他们为什么这样编码这个例子@boyetboy我最初的问题包括代码取自的链接,在那里你会看到操作同时在OnMouseUp()和OnMouseDown()中执行。WinForms团队告诉我:“HideException是用于阻止默认鼠标事件处理的内部异常。我们同意这是一种老式的停止代码执行的方法,特别是考虑到我们已经有了能够设置e.Handled=true的DXMouseEventArgs。不幸的是,XtraTreeList当前不完全支持DXMouseEventArgs。我们将在下一个小版本中添加此功能,并相应地更新E2474示例。“因此,在一个月左右的时间内,它将引起考古界的兴趣……我将您的评论添加到您的答案中,以便它具有一些永久性,希望您不介意。
    private void OnMouseDown(object sender, MouseEventArgs e)
    {
       if ( e.Button != MouseButtons.Left )
           return;
    
       TreeListHitInfo hitInfo = ((TreeList)sender).CalcHitInfo(e.Location);
       if ( hitInfo.HitInfoType == HitInfoType.Column )
       {
           ColumnInfo colInfo = ((TreeList)sender).ViewInfo.ColumnsInfo[hitInfo.Column];
           GridFilterButtonInfoArgs filterButtonInfo = GetFilterButtonInfoArgs(colInfo);
           
           if ( filterButtonInfo != null && filterButtonInfo.Bounds.Contains(e.Location) )
           {
               filterButtonInfo.State = ObjectState.Pressed;
                   ((TreeList)sender).InvalidateColumnHeader(hitInfo.Column);
    
               throw new HideException();
           }
       }