Kirjaudu sisään Microsoft-tilillä
Kirjaudu sisään tai luo tili.
Hei,
Käytä toista tiliä.
Sinulla on useita tilejä
Valitse tili, jolla haluat kirjautua sisään.

Katso muut tuotteet, joita tämä artikkeli koskee.

Oireet

Kun automatisoit Microsoft Office Microsoft Visual Basic .NET:stä tai Microsoft Visual C# .NET:stä, Office-sovellus ei poistu, kun lopetat puhelun.

Syy

Kun Visual Studio .NET kutsuu COM-objektia hallitun koodin avulla, se luo automaattisesti Runtime Callable Wrapper (RCW) -wrapperin. RCW Marshals soittaa .NET-sovelluksen ja COM-objektin välillä. RCW säilyttää viittausten määrän COM-objektissa. Jos kaikkia viittauksia ei ole julkaistu RCW:ssä, COM-objekti ei poistu.

Ratkaisu

Voit varmistaa, että Office poistuu, tarkistamalla, täyttääkö automaatiokoodi seuraavat ehdot:

  • Määritä kukin objekti uudella muuttujalla. Muuta esimerkiksi seuraavaa koodiriviä:

    oBook = oExcel.Workbooks.Add()
    

    Muuta tämä seuraavasti:

    dim oBooks as Excel.Workbooks
    oBooks = oExcel.Workbooks
    oBook = oBooks.Add()
    
  • Käytä System.Runtime.InteropServices.Marshal.ReleaseComObject-funktiota silmukassa, kunnes se palauttaa arvon 0, kun olet lopettanut objektin käytön. The System.Runtime.InteropServices.Marshal.ReleaseComObject decrements the reference count of the RCW, and the loop makes sure that the underlying COM component is released regardless of how monta times it has re-entered the CLR.

  • Jos haluat vapauttaa muuttujan viittauksen, määritä muuttujan arvoksi Ei mitään tai Tyhjäarvo.

  • Pyydä palvelinta Office sulkemismenetelmällä.

Tila

Tämä tapahtuu oletusarvoisesti.

Lisätietoja

Toimintavaiheet uudelleen

  1. Käynnistä Visual Studio .NET.

  2. Valitse Tiedosto-valikossa Uusi ja valitse sitten Project. Valitse Visual Basic-kohdassa Windows sovellus ja valitse sitten OK.

    Huomautus Lomake1 luodaan oletusarvoisesti.

  3. Lisää viittaus Microsoft Excel objektikirjastoon. Voit tehdä tämän seuraavasti:

    1. Valitse Project-valikossa Lisää viite.

    2. Etsi COM-välilehdessä kohdekirjaston Excel ja valitse sitten Valitse.

      Microsoft Excel 2002: Microsoft Excel 10.0 Object LibraryNote

      Jos et ole jo tehnyt sitä, suosittelemme, että lataat ja asennat Microsoft Office XP:n ensisijaiset interop-kokoonpanot (PIAs).

      Lisätietoja XP-Office on seuraavassa Microsoft Knowledge Base -tietokannan artikkelissa:

      328912 Microsoft Office XP:n ensisijaiset risteyskokoonpanot (PIAs) ovat ladattavissa
        For Microsoft Office Excel 2003: Microsoft Excel 11.0 Object Library

    3. Hyväksy valinnat valitsemalla Lisää viittauksia -valintaikkunassa OK.

  4. Valitse Näytä-valikossa Työkaluryhmä ja vedä sitten Painike-ohjausobjekti Lomake1:lle.

  5. Kaksoisnapsauta Painiketta1.

    Huomautus Lomakkeen koodi-ikkuna tulee näkyviin.

  6. Lisää seuraava koodi Form1.vb-sivun alkuun:

    Imports Microsoft.Office.Interop
    
  7. Korvaa koodi-ikkunassa seuraava koodi:

        Private Sub Button1_Click(ByVal sender As System.Object, _
           ByVal e As System.EventArgs) Handles Button1.Click
        End Sub
    

    Vaihda seuraava koodi:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oApp As New Excel.Application()
        Dim oBook As Excel.Workbook = oApp.Workbooks.Add
        Dim oSheet As Excel.Worksheet = oApp.ActiveSheet
    
        oSheet = Nothing
        oBook.Close(False)
        oBook = Nothing
        oApp.Quit()
        oApp = Nothing
    
        Debug.WriteLine("Sleeping...")
        System.Threading.Thread.Sleep(5000)
        Debug.WriteLine("End Excel")
    End Sub
    
  8. Suorita sovellus painamalla F5-näppäintä.

  9. Avaa Windows Tehtävienhallinta. Tuo Visual Studio näkyviin Tulostus-ikkuna, jotta näet virheenkorjausviestit. Napsauta komentopainiketta. Huomaa, että Excel.exe näkyy Prosessit-luettelossa.

  10. Tehtävän esiintymä Excel edelleen tehtäväluettelossa, vaikka sovellus olisi lopettanut unisyistä. Sulje valintaikkuna ja huomaa, Excel ei enää näy Prosessit-luettelossa.

  11. Kun teet Ratkaisu-osion vaiheet, Office poistuu, kun se on vapauttanut viimeisen muuttujan. Korvaa vaiheen 5 funktio seuraavalla koodilla:

      Private Sub NAR(ByVal o As Object)
        Try
          While (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0)
          End While
        Catch
        Finally
          o = Nothing
        End Try
      End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim oApp As New Excel.Application()
        Dim oBooks As Excel.Workbooks = oApp.Workbooks
        Dim oBook As Excel.Workbook = oBooks.Add
        Dim oSheet As Excel.Worksheet = oApp.ActiveSheet
    
        NAR(oSheet)
        oBook.Close(False)
        NAR(oBook)
        NAR(oBooks)
        oApp.Quit()
        NAR(oApp)
    
        Debug.WriteLine("Sleeping...")
        System.Threading.Thread.Sleep(5000)
        Debug.WriteLine("End Excel")
    End Sub
    

Jos käytössäsi on Visual C# .NET, viittaa NAR()-funktion koodiin:

private void NAR(object o)
{
    try 
    {
        while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) ;
    }
    catch {}
    finally 
    {
        o = null;
    }
}

Huomautus .NET Framework 2.0-versiosta alkaen voit käyttää System.Runtime.InteropServices.Marshal.FinalReleaseComObject-funktiota sen sijaan, että käyt silmukkapuheluita System.Runtime.InteropServices.Marshal.ReleaseComObject saman tuloksen saavuttamiseksi.
 

Vianmääritys

Huomautus Jos noudatat ohjeita, jotka on kuvattu "Toimintavaiheet uudelleen" -osassa, eikä palvelin vieläkään sammu, voit käyttää GC:tä. Collect()-menetelmä ja GC. WaitForPendingFinalizers() -menetelmä viimeisen objektin julkaisun jälkeen. Runtime suorittaa roskakorikokoelman RCW:ssä, eli GC:ssä. Collect()-menetelmä pakottaa roskakorin keräystyökalun toimimaan ja saattaa vapauttaa KAIKKI RCW:n viittaukset. The GC. Collect()-menetelmä yrittää ottaa käyttöön suurimman käytettävissä olevan muistin. Huomaa, että tämä ei takaa, että kaikki muisti voidaan ottaa uudelleen käyttöön.

Koskee seuraavia:

Tämä artikkeli koskee myös seuraavia:

  • Microsoft Visual Basic .NET (kaikki versiot)

  • Microsoft Visual C# .NET (kaikki versiot)

  • Microsoft Office 2016 (kaikki versiot)

  • Microsoft Office 2013 (kaikki versiot)

Tarvitsetko lisäohjeita?

Haluatko lisää vaihtoehtoja?

Tutustu tilausetuihin, selaa harjoituskursseja, opi suojaamaan laitteesi ja paljon muuta.

Osallistumalla yhteisöihin voit kysyä kysymyksiä ja vastata niihin, antaa palautetta sekä kuulla lisää asiantuntijoilta, joilla on runsaasti tietoa.

Oliko näistä tiedoista hyötyä?

Kuinka tyytyväinen olet käännöksen laatuun?
Mikä vaikutti kokemukseesi?
Kun valitset Lähetä, palautettasi käytetään Microsoftin tuotteiden ja palveluiden parantamiseen. IT-järjestelmänvalvojasi voi kerätä nämä tiedot. Tietosuojatiedot.

Kiitos palautteesta!

×