The Moth - C# with MyEvents functionality (original) (raw)

« VB2005 Magic – Application Startup and M... | [again] Blog link of the week 36 »

Fri, September 3, 2004, 05:15 AM under Whidbey | VisualStudio

If you are not aware of the MyEvents functionality that VB2005 offers, check out a screenshot and short description here.

The question is how to get the same support in C#. Well it all becomes pretty straightforward if you understand how MyEvents and the new startup model work in VB. I provided an exploration here.

So, armed with that knowledge, in a new C# Windows Application do the following:
1. Add a reference to Microsoft.VisualBasic.dll
2. Replace all the code in Program.cs with the 35 lines of code given below
3. Form1.cs. This is the main form (you could put a button that throws an exception)
4. Add a form Form2.cs. This is the splash screen, no code needed.
5. Build in release mode and run from explorer.

Here is the code:

namespace WindowsApplicationCSusingVB{

public class MyApplication :

              System.Windows.Forms.WindowsFormsApplicationBase{


public MyApplication(): 

         base(System.Windows.Forms.AuthenticationMode.Windows){


base.NetworkAvailabilityChanged += new

     Microsoft.VisualBasic.MyServices.NetworkAvailableEventHandler

                (this.MyApplication_NetworkAvailabilityChanged);


base.Shutdown += 

                new System.Windows.Forms.ShutdownEventHandler

                                  (this.MyApplication_Shutdown);


base.UnhandledException += new 

         System.Windows.Forms.UnhandledExceptionEventHandler

                         (this.MyApplication_UnhandledException);


base.Startup += new 

             System.Windows.Forms.StartupEventHandler

                                    (this.MyApplication_Startup);


this.IsSingleInstance = false;

this.EnableVisualStyles = true;

this.ShutdownStyle = 

           System.Windows.Forms.ShutdownMode.AfterMainFormCloses;

}

protected override void OnCreateMainForm(){

this.MainForm = new Form1();

}

protected override void OnCreateSplashScreen(){

this.SplashScreen = new Form2();

}

private void MyApplication_NetworkAvailabilityChanged(object sender,

    Microsoft.VisualBasic.MyServices.NetworkAvailableEventArgs e){


System.Windows.Forms.MessageBox.Show("network");

}

private void MyApplication_Shutdown(object sender, System.EventArgs e){

System.Windows.Forms.MessageBox.Show("shutdown");

}

private void MyApplication_Startup(object sender,

                         System.Windows.Forms.StartupEventArgs e){

System.Windows.Forms.MessageBox.Show("startup");

}

private void MyApplication_UnhandledException(object sender,

              System.Windows.Forms.UnhandledExceptionEventArgs e){

System.Windows.Forms.MessageBox.Show(

              e.Exception.StackTrace, e.Exception.Message);

e.ExitApplication = false;

}

internal static void Main(string[] Args){

(new MyApplication()).Run();

}

} //end class

} //end namespace