c # - Kontroller om vinduet fra den indlæste enhed er åben

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har nedenstående kode, der udføres på en knap, for at åbne et vindue fra en anden application.exe


gAssembly = Assembly.LoadFrom(JLDBConnection.Properties.Settings.Default.DefaultString + @"JLRetailTerminal.exe");
Type typ = gAssembly.GetExportedTypes().Where(s => s.Name == "RetailWindow").FirstOrDefault();
typ.GetMethod("Show").Invoke(Activator.CreateInstance(typ), null);


gAssembly er en global variabel.

Hvordan kan jeg kontrollere, om 'RetailWindow' allerede er åbnet og ikke åbne et andet vindue?

Bedste reference


Er du den eneste der skaber den? Hvis ja, kan du gemme vinduesinstansen og kontrollere IsVisible:


dvs .:


g\_wnd = (Window)Activator.CreateInstance(type);

if (!g\_wnd.IsVisible)
{
}

Andre referencer 1


Fuld opløsning.


    var gAssembly = Assembly.LoadFrom(JLDBConnection.Properties.Settings.Default.DefaultString + @"JLRetailTerminal.exe");
    Type typ = gAssembly.GetExportedTypes().Where(s => s.Name == "RetailWindow").FirstOrDefault();
    //if extend sale is set prevent multiple windows
    if (gWindow == null)
    {//show if window has never been opened
          gWindow = (Window)Activator.CreateInstance(typ);
          gWindow.Show();
    }
    else
    {//window has been opened
          var windows = Application.Current.Windows; //get all opened windows in applications                                        
          if (!windows.OfType<Window>().Contains(gWindow) || !(JLDBConnection.Properties.Settings.Default.ExtendSale == "Yes"))
          {   //if window has been closed   or not multiple sale database                                                                                
                gWindow = (Window)Activator.CreateInstance(typ);
                gWindow.Show();
          }
     }