【问题标题】:Update call UI function DLL更新调用 UI 函数 DLL
【发布时间】:2012-02-01 12:09:28
【问题描述】:

我试图弄清楚如何从正在执行某些任务的 DLL 更新我的 UI。

我不知道 DLL 如何知道 UI 的任何内容。

希望解释得更清楚:

假设任务 1、任务 2 和 UI。
task1 和 task2 都是 DLL,不知道任何 UI。
如何告诉 DLL 在 UI 中调用某些函数?

希望我足够清楚,我对 C# 的了解远非我想要的。

提前致谢。

PS 希望不要让事情变得更糟,这两个任务都有自己的 appDomain

【问题讨论】:

  • Winform, wpf, 你试过的代码,我们需要更多细节:)

标签: .net dll delegates appdomain


【解决方案1】:

您没有告诉他们更新 UI,而是引发了一个表明某些事情发生了变化的事件,这可能很有趣 - 然后您让 UI 在您的实例上订阅该事件,并相应地更新 UI。

所以,假设你想在类的任何属性发生变化时引发一个事件(方便的是,INotifyPropertyChanged 接口甚至描述了你将要这样做,很多事情都会“注意”和“做正确的事”,例如BindingList<T>)

所以你声明你的类有属性:

public event PropertyChangedEventHandler PropertyChanged;

然后,要引发事件,您只需调用:

if (PropertyChanged != null)
{
    PropertyChangedEventArgs e = new PropertyChangedEventArgs(propertyName);
    PropertyChanged(this, e);
}

要订阅事件(在您的客户端应用程序/UI 层中),就像拥有事件处理程序一样简单:

protected void yourClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
     // Update the UI -- might need to check whether you need too invoke, if you're multi-threaded
}

添加接线

YourClass foo = new YourClass();
foo.PropertyChanged += new PropertyChangedEventHandler(this.yourClass_PropertyChanged);

【讨论】:

  • 您能否详细说明如何执行此操作?或者在哪里可以找到这方面的更多信息?
  • @John 任何特定的语言?
  • @John 我不确定英语 -> IL 编译器 :)
  • @John 语法在 VB.Net 中稍微简单一些,但我添加了应该工作的各种位...
  • 可以传参数吗?
猜你喜欢
  • 2018-11-09
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 1970-01-01
相关资源
最近更新 更多