Где написать функции ApplicationEvents.vb при конвертации проекта в C # - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь преобразовать проект VB.NET в C #. Я передаю все формы и классы по мере необходимости, но я не знаю, где мне нужно написать события из ApplicationEvents.vb (я считаю, что он автоматически сгенерирован из свойств)

Вот код в моем файле ApplicationEvent.vb:

Imports GM.Powertrain.RemoteCopy.Interfaces
Imports System.Runtime.Remoting.Channels.Tcp
Imports System.Runtime.Remoting.Channels

Namespace My
   Partial Friend Class MyApplication
      Private Shared serviceConfig As ServiceConfig =
         serviceConfig.Load()

      Protected Overrides Function OnStartup(
            ByVal eventArgs As StartupEventArgs) As Boolean
         Dim channel As TcpChannel = New TcpChannel()
         ChannelServices.RegisterChannel(channel, False)
         Me.MainForm = New Computer_Network_MAIN_SCREEN()
         Return MyBase.OnStartup(eventArgs)
      End Function

      Public ReadOnly Property Config() As ServiceConfig
         Get
            Return serviceConfig
         End Get
      End Property

      Public ReadOnly Property LocalMachine() As IRemoteCopier
         Get
          Return serviceConfig.GetObject(Of IRemoteCopier)("localhost")
         End Get
      End Property
   End Class
End Namespace

Также приветствуются любые советы, которые могут помочь в этом преобразовании. Спасибо!

Ответы [ 4 ]

5 голосов
/ 01 февраля 2012

Нет эквивалентного файла для ApplicationEvent.vb в c #.Но вы можете написать любой код в функции OnStartup, прежде чем начинать цикл в Program.cs.

[STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        //code in OnStartUp
        Application.Run(new Form1());
        Application.ApplicationExit += Application_ApplicationExit;
    }

    static void Application_ApplicationExit(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

Надеюсь, это поможет.

1 голос
/ 01 февраля 2012

Вот способ самостоятельно найти свой ответ на этот вопрос:

  • Скомпилируйте ваш VB-код
  • Декомпилируйте его, используя декомпилятор .net
  • Проверьте, где и как Visual Studio скомпилировал ваш код и вызвал вашу функцию

Вот несколько ссылок на декомпилятор .Net
http://www.telerik.com/products/decompiler.aspx
http://www.jetbrains.com/decompiler/
http://www.devextras.com/decompiler/
http://wiki.sharpdevelop.net/ilspy.ashx
или, может быть, вы сможете найти старую версию .Net Reflector, когда она будет бесплатной ...

0 голосов
/ 01 февраля 2012

Visual Studio 2010 создает файл Program.cs для проектов приложений на C #.

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new frmMain());
    }
}

Application.Run () будет, если это VB.NET, запустить событие «Запуск».В этом случае вам не нужно перехватывать это событие, потому что вы контролируете, когда приложение будет запущено, используя код, указанный выше.

Если вы хотите подписаться на событие, инициированное, когда приложение собираетсязакрыть, используйте этот код:

Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

и затем определите функцию для обработки этого события:

static void Application_ApplicationExit(object sender, EventArgs e)
{
    // your shutdown code here ...
}

В результате ваш код должен выглядеть примерно так:

using GM.Powertrain.RemoteCopy.Interfaces; 
using System.Runtime.Remoting.Channels.Tcp; 
using System.Runtime.Remoting.Channels; 

namespace ProjectName
{
    static class Program
    {
        private static ServiceConfig serviceConfig = serviceConfig.Load();

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            TcpChannel channel = new TcpChannel();
            ChannelServices.RegisterChannel(channel, false);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMainCard());
            Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
        }

        public static ServiceConfig Conifg
        {
            get { return serviceConfig; }
        }

        public static IRemoteCopier LocalMachine
        {
            get { return serviceConfig.GetObject<IRemoteCopier>("localhost"); }
        }

        static void Application_ApplicationExit(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    }
}
0 голосов
/ 01 февраля 2012

Как преобразовать этот класс полностью зависит от того, как вы реализовали новый проект C #.

Если это стандартный проект Windows Forms, я бы добавил код OnStartup в Main непосредственно перед открытием главной формы. Из этого кода вам, вероятно, нужны только элементы, относящиеся к serviceConfig и Channel, а не код MainForm.

...