永发信息网

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

答案:5  悬赏:0  手机版
解决时间 2021-03-16 08:37
  • 提问者网友:心牵心
  • 2021-03-16 03:43
我现在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”,
这是为什么呀,没有用过委托,请各位知道下,谢谢
最佳答案
  • 五星知识达人网友:深街酒徒
  • 2021-03-16 05:21
public partial class Form1 : Form
{
//定义一个委托
public delegate void MyInvoke(string str);
MyInvoke = new Myinvoke(UpdateForm);
//更新界面的方法
public void UpdateForm(string str)
{
this.listBox1.Items.Add(str);
}
public void DownThread()
{
//ToDo
this.Invoke(Myinvoke,"线程" + nThread + "图片" + "下载成功");
}
public void ThreadStar() //此处可以改为一个button点击事件
{
Thread th = new Thread(DownThread);
th.start();
}
}
全部回答
  • 1楼网友:西岸风
  • 2021-03-16 08:51
invoke在线程中等待dispatcher调用指定方法,完成后继续下面的操作。 begininvoke不必等待dispatcher调用制定方法,直接继续下面的操作。
  • 2楼网友:逃夭
  • 2021-03-16 07:36
MyInvoke 不是静态变量,怎么看你的代码好像用静态变量的调用方法啊 应该是 formObj.MyInvoke mi = new formObj.MyInvoke() 吧
  • 3楼网友:行雁书
  • 2021-03-16 07:12
试试 WindowsApplication1.Form1.MyInvoke mi =null; mi+= new WindowsApplication1.Form1.MyInvoke(formObj.UpdateForm);
  • 4楼网友:七十二街
  • 2021-03-16 06:13
formObj.UpdateForm是null 设断点看吧.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯