Where to write the functions of ApplicationEvents.

2019-08-08 04:56发布

I am trying to convert a VB.NET project to C#. I am conveting all the forms and classes as required, but I don't know where I need to write the events from ApplicationEvents.vb (I believe its autoGenerated from Properties)

Here is the code in my ApplicationEvent.vb file:

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

Also, any tips that may help on this conversion would be appreciated. Thanks!

4条回答
爷的心禁止访问
2楼-- · 2019-08-08 05:27

Here is a way to find your answer by yourself for this kind of question:

  • Compile your VB code
  • Decompile it using a .net decompiler
  • Check where ad how Visual Studio compiled your code, and called your function

Here is some links to .Net decompiler
http://www.telerik.com/products/decompiler.aspx
http://www.jetbrains.com/decompiler/
http://www.devextras.com/decompiler/
http://wiki.sharpdevelop.net/ilspy.ashx
or maybe you'll be able to find an old version of .Net Reflector when it was free...

查看更多
Explosion°爆炸
3楼-- · 2019-08-08 05:28

How to convert this class depends entirely on how you have implemented the new C# project.

If this is a standard windows forms project, I would add the OnStartup code to Main just before the main form is opened. Of this code, you probably only need the serviceConfig and Channel-related items, not the MainForm code.

查看更多
▲ chillily
4楼-- · 2019-08-08 05:35

Visual Studio 2010 creates Program.cs file for C# application projects.

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() would, if this was VB.NET, fire "Startup" event. In this case, you don't need to catch that event because you control when is the application going to run using the code specified above.

If you want to subscribe to the event fired when the application is about to close, use this code:

Application.ApplicationExit += new EventHandler(Application_ApplicationExit);

and then define the function to handle this event:

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

As a result, your code should look something like this:

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();
        }
    }
}
查看更多
看我几分像从前
5楼-- · 2019-08-08 05:36

There is no equivalent file for ApplicationEvent.vb in c#. But you can write whatever code is there in OnStartup function before you start the loop in 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();
    }

Hope this helps.

查看更多
登录 后发表回答