【问题标题】:System.ComponentModel namespace usageSystem.ComponentModel 命名空间使用
【发布时间】:2010-12-26 19:42:21
【问题描述】:

我认为自己是一位经验丰富的 .NET 开发人员,但我几乎从未直接使用过 System.ComponentModel 命名空间中的类型。 (我已经实现了一些自定义属性并通过反射使用它们)。

Component、Container、PropertyDescriptor、TypeDescriptor、License、TypeConverter等类型在哪些场景下最有用?

在谈论“设计器”(例如 Visual Studio 中可用的设计器)时,我经常看到 System.ComponentModel 被提及。

这些类型是否仅在您想使用漂亮的可视化设计器构建自定义控件(例如自定义属性等)时才有用?或者我也可以在更通用的代码中使用它们?

【问题讨论】:

    标签: .net system.componentmodel


    【解决方案1】:

    和你一样,我只间接使用了你列出的特定类(ComponentContainer 等),即以已经派生的形式(每个 System.Windows.Forms.Control 都派生自 Component 等) .所以我没有什么要补充的了。在向自定义控件添加属性时,我几乎总是使用许多 DefaultValueAttributeDesignerSerializationVisibilityAttribute 和其他 *Attribute 类。但这很常见,可能不是您的问题所在。

    就命名空间的其余部分而言,我需要进行大量的异步处理,并经常使用以下内容:

    • AsyncOperation
    • AsyncOperationManager
    • ProgressChangedEventHandler / ProgressChangedEventArgs
    • RunWorkerCompletedEventHandler / RunWorkerCompletedEventArgs

    【讨论】:

    • 对于异步处理,我实际上使用了异步编程模型,即。代表和 BeginInvoke()、EndInvoke()。 AsyncOperation 等有何不同,你知道吗?
    • 当您创建一个公开异步事件的类时,您通常使用 AsyncOperation 等。换句话说,当您是异步事件的提供者,而不是消费者时。如果您使用 DoWorkAsync() 和 CancelAsync() 方法以及 DoWorkCompleted 和 DoWorkProgressUpdated 事件创建一个类,则可以使用它们来确保在正确的线程上调用事件。
    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 2011-05-07
    相关资源
    最近更新 更多