C#调用外部类库中事件的问题

xsh2003 2011-11-15 06:36:18
最近写一个程序,调用了一个外部的Dll库文件,里面有个事件。不知道怎么去调用它。用事件订阅的方式可以执行,但是在事件处理方法里面对控件赋值时,提示 Form.dll偶尔的类型出错,控件的值没有变化。不知道是怎么回事。下面是代码:

public ExecClass(MainForm From) //类构造函数中订阅事件 {
base.onProgressChanged += new _IPSExchangeEvents_onProgressChangedEventHandler(main_onProgressChanged);

}

/// <summary>
/// 事件处理
/// </summary>
public void main_onProgressChanged(object sender, int e)
{
TextBox1.Text = e.ToString(); //执行这里时在输出窗口中就提示类型错误了,但是e中是有值的,文本框中就没有值。求解????
}

...全文
251 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsh2003 2011-11-16
  • 打赏
  • 举报
回复
已经找到答案了,原来是线程的问题,不同线程访问造成文本框的类型异常,刚开始没想到这个类库会自己开个线程来执行这个事件。还有个问题没有弄清楚,为什么我在第二个参数输入 int 不提示线程间的调用控件的异常,而输入System.Int32后就提示线程调用控件的异常了。。不知道是为什么!

附上线程调用控件的处理代码:



public delegate void ProgressChanged(object sender, System.Int e);

public void onProgressChanged(object sender, System.Int e)
{
if (this.textBox1.InvokeRequired)
{
MessageOutputText txt = new MessageOutputText(ProgressChanged);
this.textBox1.BeginInvoke(txt, new object[] { sender, e });
}
else
{
this.textBox1.AppendText(e) ;
}
}
sdl2005lyx 2011-11-15
  • 打赏
  • 举报
回复
在你要触发事件的地方:

YourArgs args=new YourArgs ();
args.data=100;

OnProgress(args);//触发事件

你可以看看MSDN上面对事件的介绍。。。
xsh2003 2011-11-15
  • 打赏
  • 举报
回复
事件里面的第二个参数是int型数据,这里如何进行传值,具体该去怎么写法

public class YourArgs:public EventArgs
{
public int data;
}
阿非 2011-11-15
  • 打赏
  • 举报
回复
那个位置应该是 继承自EventArgs 的一个类

你可以先写 EventArgs 然后断点看下具体的类型
sdl2005lyx 2011-11-15
  • 打赏
  • 举报
回复
事件参数,基类是EventArgs,你要传递int数据,自己要派生一个事件参数类:


public class YourArgs:public EventArgs
{
public int data;
}


用YourArgs传递数据!
xsh2003 2011-11-15
  • 打赏
  • 举报
回复
就是要的是整型的数据。
thinkingforever 2011-11-15
  • 打赏
  • 举报
回复
main_onProgressChanged(object sender, int e)
第二个参数是整型,看看那个事件要的是啥类型

110,546

社区成员

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

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

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