C# 递交Event的问题

jingkingsoft 2004-08-27 12:32:45
在VB.NET 里面,常有Public Event EventName(xxxx)
xxxx为自定的参数
E.G:
Public Class Sok
Public Event SendBack(backstr as String)
Private Sub GetString
RaiseEvent SendBack("abcd")
End Sub
End Class
RaiseEvent可以提交随意的数据
但是到了C#里面,这样就很困难了,只能用EventHandle,数据也只能为默认的object sender,EventArgs e.
想要提交自己的数据,还得重写Class EventArgs
这太让人不爽了,我用一个线程运行实例中的一个方法,想及时地取得这个实例当时的数据,总是不成功。
C#应该有这个方法的阿,我把本机的MSDN都翻遍了还是没找到。
各位大虾99我啊
...全文
161 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
在线等待中…………
Samen168 2004-08-27
  • 打赏
  • 举报
回复
public delegate EventHandlerTest(obejct testValue); //定义委托
public event EventHandlerTest Test; //定义事件

public Do...()
{
if(Test!=null) Test(new object()); //触发自定义事件
}
Samen168 2004-08-27
  • 打赏
  • 举报
回复
晕,胡闹
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
知道了
可以通过函数设置当前实例的属性
并且发送不含数据的事件让调用线程来操作
不过
对这个方法还是想多知道一些。
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
楼上的
没看明白
实例在运行的时候如何向引用层递交数据?
Public Event SendBack(object sender,EventArgs e)

bb();

bb这个函数是干什么用的?我看到传递的还是object sender,EventArgs e啊
能否解释清楚一点
谢了!
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
Public Event UpdateTime(ByVal Jump As Double)
Public Event ChangeText()

RaiseEvent ChangeText()
就可以看出来,VB对Event可以随时定义,随时触发
没那么多罗嗦的。
C#难道真的必须要
public event EventHandle EventName
………………?
happyno7 2004-08-27
  • 打赏
  • 举报
回复
可以这样
Public Event SendBack(object sender,EventArgs e)

bb();


private void bb()

//具体代码


public string getString()
{
bb();
}
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
备注
声明了事件后,使用 RaiseEvent 语句引发事件。一个典型事件的声明和引发可能如以下片断所示:

Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
注意 可以像声明过程参数那样声明事件参数,以下特例除外:事件不能具有命名参数或 Optional 参数。事件没有返回值。


还有一个示例,也是MSDN上面的
示例
下面的示例使用事件在最快的 100 米赛跑演示期间计算秒数。代码阐释了所有与事件相关的方法、属性和语句,包括 RaiseEvent 语句。

引发事件的类是事件源,而处理事件的方法是事件处理程序。事件源对它生成的事件可以具有多个处理程序。当类引发事件时,将在每一个被选择用来处理该对象实例的事件的类上引发该事件。

本示例还使用一个窗体 (Form1),该窗体具有一个按钮 (Command1)、一个标签 (Label1) 和两个文本框(Text1 和 Text2)。当单击按钮时,第一个文本框显示“From Now”,第二个文本框开始计秒。当经过全部时间(9.84 秒)后,第一个文本框显示“Until Now”,第二个文本框显示“9.84”。

Form1 的代码指定窗体的初始状态和最终状态。它还包含引发事件时执行的代码。

若要使用此示例,请打开一个新的 Windows 窗体项目,向名为 form1 的主窗体中添加一个名为 Button1 的按钮、一个名为 Label1 的标签和名称分别为 TextBox1 和 TextBox2 的两个文本框。然后右击窗体并单击“查看代码”来打开代码编辑器。

若要简化对 Timer 属性的访问,请将 Imports 语句添加到 Class Form1 语句的前面作为第一行代码。

Imports Microsoft.VisualBasic.DateAndTime
将 WithEvents 变量添加到 Form1 类的声明部分。

Private WithEvents mText As TimerState
将下面的代码添加到 Form1 的代码中。替换可能存在的任何重复过程,如 Form_Load 或 Button_Click。

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Button1.Text = "Click to Start Timer"
TextBox1.Text = ""
TextBox2.Text = ""
Label1.Text = "The fastest 100 meters ever run took this long:"
mText = New TimerState()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
TextBox1.Text = "From Now"
TextBox1.Refresh()
TextBox2.Text = "0"
TextBox2.Refresh()
mText.TimerTask(9.84)
End Sub

Private Sub mText_ChangeText() Handles mText.ChangeText
TextBox1.Text = "Until Now"
TextBox2.Text = "9.84"
End Sub

Private Sub mText_UpdateTime(ByVal Jump As Double) _
Handles mText.UpdateTime
TextBox2.Text = Format(Jump, "##0.00")
Application.DoEvents()
End Sub

Class TimerState
Public Event UpdateTime(ByVal Jump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim Start As Double
Dim Second As Double
Dim SoFar As Double
Start = Timer
SoFar = Start
Do While Timer < Start + Duration
If Timer - SoFar >= 0.1 Then
SoFar = SoFar + 0.1
RaiseEvent UpdateTime(Timer - Start)
End If
Loop
RaiseEvent ChangeText()
End Sub
End Class
mulintaomulintao 2004-08-27
  • 打赏
  • 举报
回复
VB中的Event 也不是随便的,除非你知己定义委托和事件
jingkingsoft 2004-08-27
  • 打赏
  • 举报
回复
是的
VB.NET里面可以
但是C#就只能传递一默认的两个数据
这个数据是不和当前操作数据相关的(事实上这种方法VB.NET也有)
我就是想找和
VB Public Event EventName(参数)
差不多或者相对应的C#的方法
大虾们请告知阿。
peacess 2004-08-27
  • 打赏
  • 举报
回复
对你的问题不是很清楚,是不是要在实例数据变化时,取得实例的数据啊,
也就是说,在数据变化是,触发一个事件,在处理这个事件时取得数据,可是在取得数据时老是不成功,不知道你是不是这个意思

110,566

社区成员

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

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

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