VB CreateObject转C#

C#调用方法、函数获取属性大致流程如下:

            System.Type oType = System.Type.GetTypeFromProgID("SomeClass");
            object o = System.Activator.CreateInstance(oType);
            oType.InvokeMember("SomeMethod", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { arg1, arg2 });
            w = oType.InvokeMember("SomeFunction", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { arg1, arg2 });
            w = oType.InvokeMember("SomeGet", System.Reflection.BindingFlags.GetProperty, null, o, null);
            oType.InvokeMember("SomeSet", System.Reflection.BindingFlags.SetProperty, null, o, new object[] { w }); 

示例:VB.NET 获取计划任务列表

复制代码
Dim service = CreateObject("Schedule.Service")
        Call service.Connect()

        ' Get the task folder that contains the tasks. 
        Dim rootFolder
        rootFolder = service.GetFolder("\")

        Dim taskCollection
        taskCollection = rootFolder.GetTasks(0)

        Dim numberOfTasks
        numberOfTasks = taskCollection.Count

        If numberOfTasks = 0 Then
            Debug.Print("No tasks are registered.")
        Else
            Debug.Print("Number of tasks registered: " & numberOfTasks)

            Dim registeredTask
            For Each registeredTask In taskCollection
                Debug.Print("Task Name: " & registeredTask.Name)

                Dim taskState
                Select Case registeredTask.State
                    Case "0"
                        taskState = "Unknown"
                    Case "1"
                        taskState = "Disabled"
                    Case "2"
                        taskState = "Queued"
                    Case "3"
                        taskState = "Ready"
                    Case "4"
                        taskState = "Running"
                    Case Else
                        taskState = "Unknown"
                End Select

                Debug.Print("    Task State: " & taskState)
            Next
        End If
复制代码

翻译为C#:

复制代码
var typeofScheduleService = System.Type.GetTypeFromProgID("Schedule.Service");
            var service = System.Activator.CreateInstance(typeofScheduleService);
            typeofScheduleService.InvokeMember("Connect", System.Reflection.BindingFlags.InvokeMethod, null, service, new object[] { });
            var rootFolder = typeofScheduleService.InvokeMember("GetFolder", System.Reflection.BindingFlags.InvokeMethod, null, service, new object[] { @"\" });
            var taskCollection = typeofScheduleService.InvokeMember("GetTasks", System.Reflection.BindingFlags.InvokeMethod, null, rootFolder, new object[] { 0 });
            var numberOfTasks = int.Parse(typeofScheduleService.InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, null, taskCollection, new object[] { }).ToString());
            foreach(var task in taskCollection as IEnumerable)
            {
                var taskName = typeofScheduleService.InvokeMember("Name", System.Reflection.BindingFlags.GetProperty, null, task, new object[] { }).ToString();
                var taskState = int.Parse(typeofScheduleService.InvokeMember("State", System.Reflection.BindingFlags.GetProperty, null, task, new object[] { }).ToString());
               //略去switch部分
            }
复制代码

 

posted on   空明流光  阅读(1390)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2014-11-24 获取 .net framework 路径

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示