请问这段C#代码怎么转成vb.net

dombo 2007-11-20 01:37:33
		public delegate void OnGetEventTypesDelegate(GetEventTypesResp resp, GetEventTypesTask.eventTypesEnum taskType);
public static event OnGetEventTypesDelegate OnGetEventTypes;

后面有
			if (OnGetEventTypes != null)
{
OnGetEventTypes(resp, m_taskType);
}

能触发
private void GetEventTypesTask_OnGetEventTypes(GetEventTypesResp resp, GetEventTypesTask.eventTypesEnum taskTypeEnum)

但是我转成vb.net后怎么也不能触发事件,怎么问怎么添加那个事件?
这是我转换后的代码:
     Public Delegate Sub OnGetEventTypesDelegate(ByVal resp As GetEventTypesResp, ByVal taskType As GetEventTypesTask.eventTypesEnum)
Public Shared Event OnGetEventTypes As OnGetEventTypesDelegate

 RaiseEvent OnGetEventTypes(resp, m_taskType)

Private Sub GetEventsTask_OnGetEvents(ByVal resp As GetEventsResp, ByVal node As TreeNode, ByVal marketId As Integer)
...全文
159 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuxue1342 2007-11-20
  • 打赏
  • 举报
回复
MARK
dombo 2007-11-20
  • 打赏
  • 举报
回复
晕,满5天才能加
dombo 2007-11-20
  • 打赏
  • 举报
回复
我更新一下,不是初始化的地方,加在调用GetEventTypesTask.vb 的PerformTask()前面,供以后相似问题的朋友查询
dombo 2007-11-20
  • 打赏
  • 举报
回复
感谢楼上的各位朋友,在初始化的地方加上
AddHandler GetEventTypesTask.OnGetEventTypes, AddressOf GetEventTypesTask_OnGetEventTypes
就行了,r_swordsman说的对,呵呵结贴
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
不要 Handles 声明
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
在初始化的地方加上:

AddHandler GetEventTypesTask.OnGetEventTypes, AddressOf GetEventTypesTask_OnGetEventTypes



并 GetEventTypesTask_OnGetEventTypes 的声明为


Private Sub GetEventTypesTask_OnGetEventTypes(ByVal resp As GetEventTypesResp, ByVal taskTypeEnum As GetEventTypesTask.eventTypesEnum)


试试
gyc 2007-11-20
  • 打赏
  • 举报
回复
如果是直接跳过没有执行,有可能是没有注册事件处理
C#的我不是很清楚
在VB中有2个方式

一种是使用 AddHandler 关键字,动态的 注册事件,使用RemoveHandler移除事件(一定要要移除,否则,在对象销毁后,事件处理还会执行,就会抛出异常)

另一种是使用VB的专有关键字 WithEvents
使用WithEvents关键字声明对象,如:dim withevents textbox1 as new textbox
然后事件就可以这么写
sub input(sender as object, args as ...) handles textbox1.keydown
使用 WithEvents声明对象后,可以使用Handles 关键字绑定事件(和VB6不同)


不过,关于你说的共享事件,有可能需要使用AddHandler
dombo 2007-11-20
  • 打赏
  • 举报
回复
先谢了。

GetEventTypesTask.vb


Public Class GetEventTypesTask
Implements IApiTask
Private m_taskType As GetEventTypesTask.eventTypesEnum

Public Delegate Sub OnGetEventTypesDelegate(ByVal resp As GetEventTypesResp, ByVal taskType As GetEventTypesTask.eventTypesEnum)
Public Shared Event OnGetEventTypes As OnGetEventTypesDelegate



Public Sub New(ByVal taskType As GetEventTypesTask.eventTypesEnum)
m_taskType = taskType
Console.WriteLine(taskType.ToString)
End Sub

#Region "IApiTask Members"

Public Sub PerformTask() Implements IApiTask.PerformTask
' TODO: Add GetEventsTask.PerformTask implementation

' Get session from session manager
Dim session As String = SessionTokenManager.GetSessionToken()

' If no session, log in and get another one
If session Is Nothing Then
session = LoginTask.Login().header.sessionToken
End If

' Get Active events
Dim resp As GetEventTypesResp = Nothing
While resp Is Nothing
Dim req As New GetEventTypesReq()
req.header = New APIRequestHeader()
req.header.sessionToken = session

If m_taskType = GetEventTypesTask.eventTypesEnum.ACTIVE Then
resp = New BFGlobalService().getActiveEventTypes(req)
ElseIf m_taskType = GetEventTypesTask.eventTypesEnum.ALL Then
resp = New BFGlobalService().getAllEventTypes(req)
End If
End While

' Return session to session manager
SessionTokenManager.ReturnSessionToken(resp.header.sessionToken)

' Raise event to notify app of retrieved events
'If Not ( OnGetEventTypes Is Nothing) Then
RaiseEvent OnGetEventTypes(resp, m_taskType)
'End If

'' Return session to session manager
'SessionTokenManager.ReturnSessionToken(resp.header.sessionToken)
'RaiseEvent OnGetEventTypes(resp, m_taskType)

'' Raise event to notify app of retrieved events
End Sub

Public Enum eventTypesEnum
ACTIVE
ALL
End Enum

#End Region
End Class


frmMain.vb中调用的部分,全贴太长了

#Region "GetEventTypesTask_OnGetEventTypes(GetEventTypesResp resp, GetEventTypesTask.eventTypesEnum taskTypeEnum)"
Private Sub GetEventTypesTask_OnGetEventTypes(ByVal resp As GetEventTypesResp, ByVal taskTypeEnum As GetEventTypesTask.eventTypesEnum) Handles GetEventTypesTask.OnGetEventTypes
If InvokeRequired Then
Invoke(New Tasks.GetEventTypesTask.OnGetEventTypesDelegate(AddressOf GetEventTypesTask_OnGetEventTypes), New Object() {resp, taskTypeEnum})
Else
' We need to display information from the provided API response
tvMain.Nodes.Clear()

If resp.eventTypeItems IsNot Nothing Then
Dim eventItems As EventType() = resp.eventTypeItems

Dim nodeCount As Integer = eventItems.Length
Dim nodes As TreeNode() = New TreeNode(nodeCount - 1) {}
For i As Integer = 0 To nodeCount - 1
Dim eventItem As New BFEvent()
eventItem.eventName = eventItems(i).name
eventItem.eventId = eventItems(i).id

nodes(i) = New TreeNode(eventItems(i).name)
nodes(i).Tag = eventItem
' Create a fake child node
nodes(i).Nodes.Add(New TreeNode(""))
Next
tvMain.Nodes.AddRange(nodes)
End If
End If
End Sub
#End Region


PS:我看到MSDN上有说“若要处理共享事件,必须使用 AddHandler 语句。”,这个地址:http://msdn2.microsoft.com/zh-cn/library/6hwhs172(VS.80).aspx
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
把代码贴来...帮你改
dombo 2007-11-20
  • 打赏
  • 举报
回复
回楼上,我以前就是这么改的,不是名称的问题,加上 Handles ClassName.EventName 后VS提示错误:

Handles子句要求一个在包含类型或它的某个基类型中定义的WithEvents变量
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
声明事件类型....声明事件名称....触发事件....
然后关联事件就可以了...
就这么简单
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
GetEventsTask_OnGetEvents 声明和事件声明不一致啊

修改其中一个就可以啊



'在类中

Public Delegate Sub OnGetEventTypesDelegate(ByVal resp As GetEventsResp, ByVal node As TreeNode, ByVal marketId As Integer)
Public Shared Event OnGetEventTypes As OnGetEventTypesDelegate

' 然后

Private Sub GetEventsTask_OnGetEvents(ByVal resp As GetEventsResp, ByVal node As TreeNode, ByVal marketId As Integer) Handles ClassName.OnGetEventTypes


dombo 2007-11-20
  • 打赏
  • 举报
回复
是我复制错了,有两个过程,
Private Sub GetEventsTask_OnGetEvents
Private Sub GetEventTypesTask_OnGetEventTypes
都是需要触发的,我只贴了一个的
r_swordsman 2007-11-20
  • 打赏
  • 举报
回复
GetEventsTask_OnGetEvents 声明和事件声明不一致啊
dombo 2007-11-20
  • 打赏
  • 举报
回复
转换器默认就是这么转的,C#中可以激活GetEventTypesTask_OnGetEventTypes,但是VB中却也无法激活,调试中看过了,直接跳过了,C#和vb还是结构上有区别,不知道如何在GetEventTypesTask_OnGetEventTypes后面加上事件OnGetEventTypes,请教高人。

对了,GetEventTypesTask_OnGetEventTypes在另一个类中,但已引用进来定义事件的那个类了
云中客 2007-11-20
  • 打赏
  • 举报
回复
似乎转换没有问题啊!

关注一下
qinfeng666 2007-11-20
  • 打赏
  • 举报
回复
http://www.allenkuo.com/forum/viewthread.asp?mid=2281&去看看
dombo 2007-11-20
  • 打赏
  • 举报
回复
请问如何触发
Private Sub GetEventsTask_OnGetEvents(ByVal resp As GetEventsResp, ByVal node As TreeNode, ByVal marketId As Integer)
这个过程?这里要怎么改?我在后面加上 Handles GetEventsTask.OnGetEvents 提示出错

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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