3

根据我的阅读,代表的定义是:

委托是一种引用方法的类型。一旦为委托分配了一个方法,它的行为就与该方法完全相同。委托方法可以像任何其他方法一样使用,带有参数和返回值。

现在我知道如何使用委托通过线程编写文本框来编写表单对象,但是我无法理解委托中处理的方法如何访问表单上的所有对象。如果有人能解决这个问题,我将不胜感激。

编辑:现在这里是我将如何创建一个委托

public delegate void MyDelegate(string str,int str2);

void main()
{
Thread t = new Thread(RunInThread); //Method that will run in a separate thread
t.Start();
}
void RunInThread ()
{
MyDelegate delInstatnce = new MyDelegate(AddControl); //Attach a method
this.Invoke(delInstatnce,"First Parameter",1001);
}
void AddControl(string str,int str2)
{
  //Why could you access all the form components from here ?
}
4

1 回答 1

2

首先,这是对代表的非常混乱的描述。您可能会发现我关于代表和事件的文章更有帮助。

其次,鉴于标题和正文谈论不同的事情,您的问题不是很清楚。

委托实际上只是一个对象,它封装了在类中调用方法的想法。该方法的可访问性是在委托创建时而不是在执行时控制的 - 例如,类中的代码可以创建一个引用私有方法的委托,并且该委托可以返回给类外的代码......当它被调用时,私有方法被调用。就访问而言,这仍然是“安全的”,因为只有有权访问私有方法的代码才能创建委托实例。在私有方法中,代码可以以正常方式访问所有其他成员。

现在您的标题谈到线程......并且使用委托实际上不允许您从非 UI 线程访问 UI 元素。但是,它允许您使用类似的东西,Control.Invoke或者Dispatcher.Invoke每个调用 UI 线程上的委托实例。所以你基本上是在说,“我需要运行一些代码,但我想在正确的线程上运行它——请为我做。” 委托只是您传达要在 UI 线程上运行的代码的方式。

希望有帮助。随时要求更具体的说明。

于 2012-10-28T07:51:56.463 回答