加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 你可以中止一个属性的set过程

发布时间:2020-12-15 20:48:08 所属栏目:百科 来源:网络整理
导读:我在C#.NET中编程.可以在不抛出异常的情况下中止类属性的set过程? 这是我想要做的…… public int RandomProperty{ set { DialogResult answer = new DialogResult(); answer = MessageBox.Show("This process could take up to 5 min. Are you sure you wa
我在C#.NET中编程.可以在不抛出异常的情况下中止类属性的set过程?

这是我想要做的……

public int RandomProperty
{
    set
    {
     DialogResult answer = new DialogResult();
     answer = MessageBox.Show("This process could take up to 5 min. Are you sure you want to continue?");
     if(answer = DialogResult.No) 
        CancelSet   // Can I do something similar here?
     else
     {
      ...Do set procedure
     }
    }
}

我不认为我可以使用方法(而不是属性),因为我使用propertygrid设置此值.

解决方法

在任何情况下你都不应该这样做.属性应始终快速且逻辑地表示某事物的属性.理想情况下,它永远不会失败.它当然不应该产生副作用,如弹出UI.您违反了所有这些重要指南.不要这样做.

此外,您的UI设计很糟糕.不要事先询问用户“这可能需要一段时间,你确定吗?”然后如果他们点击是,则等待很长时间来惩罚他们.相反,启动操作,如果它没有快速返回,则弹出一个UI元素,显示一个进度条和一个带有取消按钮的估计剩余时间.

您应该将长时间运行的操作编写为异步方法,可以在另一个线程上彻底取消.

对于这种事情来说,一个好的架构是让你的方法立即返回一个对象,它暴露出事件,比如“我还在运行,这里有多远”,或者“我现在已经完成了,这就是结果”,或者“我在尝试进行操作时遇到了错误,这就是它的原因”.该对象还可以公开一个“取消”方法,该方法知道如何与工作线程通信并干净地关闭它.然后,获取此对象的方法的调用者可以决定如何向用户显示UI.

使用此体系结构,您可以清晰地将UI逻辑,异步逻辑和业务流程逻辑彼此分开.这是工作,但后来它会带来好处.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读