C# BeginInvoke、Invoke委托问题。提示实例方法的委托不能具有空“this”

wolf19860612 2012-05-31 03:11:24
我现在form类中定义一个委托和一个方法,如下
public partial class Form1 : Form
{
//定义一个委托
public delegate void MyInvoke(string str);


//更新界面的方法
public void UpdateForm(string str)
{
this.listBox1.Items.Add(str);
}
……
……
}

然后在自己的进程类中操作如下:
public class DownThread
{
// this.formObj = formObj;//将form存起来
public DownThread(Form1 formObj) //构造方法
{
this.formObj=formObj;//将form存起来
}
private Form1 formObj;//用于存储form对象/* */
……
……
public void SavePhotoFromUrl() //进程程序
{
……
WindowsApplication1.Form1.MyInvoke mi = new WindowsApplication1.Form1.MyInvoke(formObj.UpdateForm);
formObj.BeginInvoke(mi, new object[] { "线程" + nThread + "图片" + "下载成功" });
……
}

程序调试到WindowsApplication1.Form1.MyInvoke mi = new WindowsApplication1.Form1.MyInvoke(formObj.UpdateForm);
时提示实例方法的委托不能具有空“this”,
这是为什么呀,没有用过委托,请各位知道下,谢谢
...全文
968 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-05-31
  • 打赏
  • 举报
回复
我从未像你这样使用过委托,因此从未见过这种现象,貌似错误是这里无法访问到那个"this.listBox1.Items.Add(str);"里面的this,你试着将那段代码注释掉看看,再或者直接将"this."去掉(没必要的前缀)。

常规的委托使用方法是,使用当前类的方法创建,或者使用静态方法创建。
wolf19860612 2012-05-31
  • 打赏
  • 举报
回复
我把MyInvoke mi定义在Form1 内部,然后访问formObj.mi变量。
但还是提示实例方法的委托不能具有空“this

[Quote=引用 2 楼 的回复:]
你只有委托定义,却没有委托对象,其实只要MyInvoke mi定义在Form1 内部即可,直接访问formObj.mi变量。
[/Quote]
wolf19860612 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
public delegate void MyInvoke(string str);
public partial class Form1 : Form
{
把委托定义在类外
[/Quote]

在外面也一样不行
qldsrx 2012-05-31
  • 打赏
  • 举报
回复
你只有委托定义,却没有委托对象,其实只要MyInvoke mi定义在Form1 内部即可,直接访问formObj.mi变量。
Rotaxe 2012-05-31
  • 打赏
  • 举报
回复
public delegate void MyInvoke(string str);
public partial class Form1 : Form
{
把委托定义在类外

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧