【问题标题】:Is it possible to access the My.Application object from a Form or Control object?是否可以从 Form 或 Control 对象访问 My.Application 对象?
【发布时间】:2014-07-29 19:33:27
【问题描述】:

我有一个包含多个项目的解决方案。有一个 Windows 应用程序项目(称为 ImportClient)和一个类库 (Import.Library)。 Import.Library 具有执行数据导入的功能(我在解决方案中有其他应用程序也需要调用它)。但是交互式应用程序,我希望能够传入一些表单控件,并让它更新 GUI。没问题。但是,我还想执行 DoEvents() 以便循环执行不会将其他交互挂起到应用程序。

因此,ImportClient 具有对 Import.Library 的引用。但是我无法将 ImportClient 的引用添加到 Import.Library,因为编译器抱怨循环引用等。我不知道如何将 ImportClient 的 My.Application 对象定义为数据函数的参数导入库。

(我意识到这是一个愚蠢的问题 - 问题是,对于这个项目,我的时间很紧,并且还没有学会如何执行 BackgroundWorker 流程​​。如果您认为我可以快速掌握它,我愿意关于如何更新 GUI 上的进度条以及如何暂停/取消后台任务的一些提示。)

【问题讨论】:

    标签: vb.net winforms


    【解决方案1】:

    Application.DoEvents 是一个静态方法,你不需要Application 的实例来调用它,那么为什么不简单地添加对System.Windows.Forms 的引用来访问它呢?

    我强烈建议您抽出时间学习线程和异步操作,Application.DoEvents 不是保持 UI 流畅的灵丹妙药...

    【讨论】:

    • 存在 Application.DoEvents 是一个很大的警告标志 它是灵丹妙药,您的应用程序就是吸血鬼。
    • 谢谢,马修!我咬紧牙关,想出了如何做一个BackgroundWorker进程。很痛苦,因为我不能将表单控件传递给线程并让它更新(VB 真的不喜欢那样)。不得不在 ReportProgress 事件中使用用户数据开发一个曲折的解决方法。
    • @Jay 我要问的问题是,你为什么要传递圆形控件?当然,您执行的操作是针对数据本身,而不是控件,所以为了保持 UI 和业务逻辑的清晰分离,您应该处理数据,并将 UI 更新留给 UI 线程?
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多