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我啊
...全文
276 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
  • 打赏
  • 举报
回复
对你的问题不是很清楚,是不是要在实例数据变化时,取得实例的数据啊,
也就是说,在数据变化是,触发一个事件,在处理这个事件时取得数据,可是在取得数据时老是不成功,不知道你是不是这个意思
代码下载地址: https://pan.quark.cn/s/97354021ce37 d触发器原理 [收藏] 维持阻塞D触发器 1 维持阻塞D触发器的电路结构 维持阻塞D触发器的电路如图1所示。从电路构造上可以观察到,该触发器是在基本RS触发器的基础上额外增加了四个逻辑门而形成的,其中C门的输出构成了基本RS触发器的清零路径,而D门的输出则形成了置位路径。C门与D门受时钟控制,能够调控数据[D]是否能够传送至基本RS触发器的输入端口。E门将数据[D]以非的形式传递至C门的输入端,随后经过F门将数据[D]以原形式传递至D门的输入端。这样设计是为了使数据[D]在时钟信号到来后,通过C门与D门实现清零或置位操作。 ### D触发器原理详解 #### 一、维持阻塞D触发器的电路结构 维持阻塞D触发器是一种常见的同步数字电路元件,其主要功能是存储一位二进制数据,并且能够在时钟信号的控制下执行数据的读写操作。该触发器通过在基本的RS触发器上增加四个逻辑门(C门、D门、E门、F门)来实现其特殊功能。 **C门**的输出用于控制基本RS触发器的清零通道,而**D门**的输出则用于控制置位通道。借助这两个门,可以在时钟信号的控制下实现数据的传输。具体而言,E门负责将数据[D]以非变量的形式传递给C门的输入端,而F门则将数据[D]以原变量的形式传递给D门的输入端。这样的设计目的是为了让数据[D]在等待时钟信号到来之后,能够通过C门和D门完成清零或置位操作。 #### 二、维持阻塞D触发器的工作原理 维持阻塞D触发器的核心机制在于利用时钟信号的变化来控制数据的有效传输,从而实现数据的存储与更新。下面我们通过具体的情形来进一步阐释这一过程。 假定触发器当前状态Q=0,输入数据[D]=...
内容概要:本文围绕基于10机39节点的电力系统仿真展开,依托Matlab与Simulink平台构建标准电力系统模型,系统开展潮流计算、暂态稳定性分析、短路故障仿真及动态响应评估等研究。文档不仅提供了完整的IEEE 39节点系统建模与仿真流程,还深入探讨了电力系统在不同运行工况下的电压、电流变化特性与稳定性表现。同时,资料整合了多项相关研究主题,涵盖微电网优化调度、分布式能源接入、储能配置、多能源系统协同运行、电力系统故障诊断及多种智能优化算法(如ADMM、NSGA-II、鲸鱼算法等)在电力系统中的应用,充分体现了该仿真平台在科研与工程实践中的广泛适用性与高阶延展价值。; 适合人群:具备电力系统分析基础理论知识,熟练掌握Matlab/Simulink仿真工具,正在从事电力系统稳定性、微电网优化、新能源并网、故障分析等相关方向研究的研究生、科研人员及电力行业工程技术人员。; 使用场景及目标:①作为电力系统课程教学与高级仿真实验的实践素材;②支撑硕士、博士论文中关于系统稳定性、故障仿真或优化调度章节的模型构建与结果验证;③用于复现高水平EI期刊或顶刊论文中的电力系统优化与控制策略;④开展微电网群调度、N-k故障分析、储能配置、电氢耦合系统等前沿课题的算法开发与仿真验证; 阅读建议:建议结合文档提供的Matlab代码与Simulink模型进行动手实践,重点掌握IEEE 39节点系统的参数设置、潮流求解与故障仿真步骤,并延伸学习文中提及的优化算法与多场景应用案例,以实现从基础建模到高级科研的跃迁。

111,129

社区成员

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

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

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