C#回调转换

本文关键字:转换 回调 | 更新日期: 2023-09-27 18:25:22

我的C#比我预期的要粗糙得多,所以我一直在寻找一些帮助来启动我的项目。我尝试过许多C#到VB的转换器,但没有一个能处理SteamKit2示例中提供的回调,我所有的研究、WithEvents实验和其他尝试都失败了。如果这超出了正常stackerflow问题的范围,我很抱歉,但最重要的是,我正在寻找一个可工作的VB.net版本的C#SteamKit2示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SteamKit2;
//
// Sample 2: The Callback Manager
//
// this sample introduces the callback manager
// the callback manager is a class which can simplify the design of your program
//
// the callback manager's task is to modify the callback loop so that the handling of callbacks
// can be done in your own functions, rather than in-line with the loop
//
// in addition to the manager, your code must create an instance of a Callback<T> class
// this class routes a specific callback type to a function, and is bound only to a specific
// callback manager
//
namespace Sample2_CallbackManager
{
    class Program
    {
        static SteamClient steamClient;
        static CallbackManager manager;
        static SteamUser steamUser;
        static bool isRunning;
        static string user, pass;

        static void Main( string[] args )
        {
            if ( args.Length < 2 )
            {
                Console.WriteLine( "Sample2: No username and password specified!" );
                return;
            }
            // save our logon details
            user = args[ 0 ];
            pass = args[ 1 ];
            // create our steamclient instance
            steamClient = new SteamClient();
            // create the callback manager which will route callbacks to function calls
            manager = new CallbackManager( steamClient );
            // get the steamuser handler, which is used for logging on after successfully connecting
            steamUser = steamClient.GetHandler<SteamUser>();
            // register a few callbacks we're interested in
            // these are registered upon creation to a callback manager, which will then route the callbacks
            // to the functions specified
            new Callback<SteamClient.ConnectedCallback>( OnConnected, manager );
            new Callback<SteamClient.DisconnectedCallback>( OnDisconnected, manager );
            new Callback<SteamUser.LoggedOnCallback>( OnLoggedOn, manager );
            new Callback<SteamUser.LoggedOffCallback>( OnLoggedOff, manager );
            isRunning = true;
            Console.WriteLine( "Connecting to Steam..." );
            // initiate the connection
            steamClient.Connect();
            // create our callback handling loop
            while ( isRunning )
            {
                // in order for the callbacks to get routed, they need to be handled by the manager
                manager.RunWaitCallbacks( TimeSpan.FromSeconds( 1 ) );
            }
        }
        static void OnConnected( SteamClient.ConnectedCallback callback )
        {
            if ( callback.Result != EResult.OK )
            {
                Console.WriteLine( "Unable to connect to Steam: {0}", callback.Result );
                isRunning = false;
                return;
            }
            Console.WriteLine( "Connected to Steam! Logging in '{0}'...", user );
            steamUser.LogOn( new SteamUser.LogOnDetails
            {
                Username = user,
                Password = pass,
            } );
        }
        static void OnDisconnected( SteamClient.DisconnectedCallback callback )
        {
            Console.WriteLine( "Disconnected from Steam" );
            isRunning = false;
        }
        static void OnLoggedOn( SteamUser.LoggedOnCallback callback )
        {
            if ( callback.Result != EResult.OK )
            {
                if ( callback.Result == EResult.AccountLogonDenied )
                {
                    // if we recieve AccountLogonDenied or one of it's flavors (AccountLogonDeniedNoMailSent, etc)
                    // then the account we're logging into is SteamGuard protected
                    // see sample 6 for how SteamGuard can be handled
                    Console.WriteLine( "Unable to logon to Steam: This account is SteamGuard protected." );
                    isRunning = false;
                    return;
                }
                Console.WriteLine( "Unable to logon to Steam: {0} / {1}", callback.Result, callback.ExtendedResult );
                isRunning = false;
                return;
            }
            Console.WriteLine( "Successfully logged on!" );
            // at this point, we'd be able to perform actions on Steam
            // for this sample we'll just log off
            steamUser.LogOff();
        }
        static void OnLoggedOff( SteamUser.LoggedOffCallback callback )
        {
            Console.WriteLine( "Logged off of Steam: {0}", callback.Result );
        }
    }
}

new Callback<SteamClient.ConnectedCallback>( OnConnected, manager );是我的主要障碍,但据我所知,GetHandler等早期部分虽然通过了编译,但翻译得并不好。

无论如何,任何建议(或完全转换)都将不胜感激!

Chris

C#回调转换

对于给您带来麻烦的语句,您需要这样的东西:

Dim TempConnectedCallback As Callback(Of SteamClient.ConnectedCallback) = New Callback(Of SteamClient.ConnectedCallback)(AddressOf OnConnected, manager)

这样做的原因是VB不允许未分配给任何对象的对象实例化。