Ketika Anda mengotomatisasi Microsoft Office aplikasi dari
Microsoft Visual Basic.NET atau Microsoft Visual C#.NET, aplikasi Office tidak berhenti ketika
Anda memanggil
Berhenti metode.
Ketika Visual Studio.NET panggilan COM objek dari berhasil
kode, secara otomatis membuat Runtime opsi beli Wrapper (RCW). RCW
Marsekal panggilan antara.NET aplikasi dan objek COM. RCW membuat
referensi count pada objek COM. Oleh karena itu, jika semua referensi belum
dirilis pada RCW, objek COM tidak berhenti.
Untuk memastikan bahwa aplikasi Office berhenti, pastikan
bahwa kode otomatisasi Anda memenuhi kriteria berikut:
- Menyatakan setiap objek sebagai variabel baru. Misalnya, mengubah
baris kode berikut
oBook = oExcel.Workbooks.Add()
dengan berikut:
dim oBooks as Excel.Workbooks
oBooks = oExcel.Workbooks
oBook = oBooks.Add()
- Penggunaan System.runtime.InteropServices.Marshal.ReleaseComObject Ketika Anda selesai menggunakan objek. Decrements ini
referensi Bangsawan dari RCW.
- Untuk mengeluarkan referensi ke variabel, tetapkan variabel
sama dengan Tidak ada atau Null.
- Penggunaan Berhenti metode dari objek aplikasi Office untuk memberitahu server untuk
Matikan.
Langkah-langkah mereproduksi perilaku
- Mulai Visual Studio.NET.
- Pada Berkas menu, klik Baru kemudian klik Project. Di bawah Proyek-proyek Visual Basic, pilih Aplikasi Windows dan klik Oke. Form1 dibuat secara default.
- Menambahkan referensi ke Perpustakaan objek Microsoft Excel. Untuk melakukannya, ikuti langkah-langkah berikut:
- Pada Project menu, klik Menambahkan referensi.
- Pada COM tab, mencari perpustakaan objek untuk Excel, dan kemudian klik Pilih.
Microsoft Excel 2002: Perpustakaan objek Microsoft Excel 10,0
Catatan Jika Anda tidak melakukannya, dianjurkan bahwa Anda
men-download dan menginstal Microsoft Office XP utama Interop Majelis (PIAs). Untuk informasi tambahan tentang Office XP PIAs, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:328912
(http://support.microsoft.com/kb/328912/
)
Microsoft Office XP utama interop Majelis (PIAs) tersedia untuk di-download
Untuk Microsoft Office Excel 2003: Perpustakaan objek Microsoft Excel 11,0 - Klik Oke dalam Menambahkan referensi kotak dialog untuk menerima pilihan Anda.
- Pada Lihat menu, klik Toolbox, dan kemudian tarik Tombol kontrol ke Form1.
- Klik dua kali Button1. Jendela kode untuk bentuk muncul.
- Menambahkan kode berikut ke atas Form1.vb:
Imports Microsoft.Office.Interop
- Ganti kode berikut dalam jendela kode
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub
dengan berikut:
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
- Tekan F5 untuk menjalankan aplikasi.
- Membuka Windows Task Manager. Dalam Visual Studio, menampilkan
Keluaran jendela untuk melihat pesan debug. Klik tombol perintah dan catatan yang
contoh Excel.exe muncul di Proses daftar.
- Contoh Excel masih berjalan dalam daftar tugas bahkan
Setelah aplikasi selesai tidur. Tutup kotak dialog dan perhatikan bahwa
Excel tidak lagi muncul dalam Proses daftar.
- Ketika Anda menerapkan langkah-langkah di bagian "Pemecahan masalah",
aplikasi Office berhenti setelah rilis terakhir variabel. Menggantikan
fungsi dalam langkah 5 dengan kode berikut:
Private Sub NAR(ByVal o As Object)
Try
System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
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
Jika Anda menggunakan Visual C#.NET, referensi kode untuk
NAR() fungsi:
private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch {}
finally
{
o = null;
}
}
Pemecahan Masalah
Catatan bahwa jika Anda mengikuti langkah-langkah yang dijelaskan dalam
"Langkah untuk mereproduksi perilaku" bagian, dan server masih tidak menutup
ke bawah, Anda dapat menggunakan
GC.Collect() metode dan
GC.WaitForPendingFinalizers() metode setelah Anda melepaskan objek terakhir. Karena runtime
melakukan pengumpulan sampah di RCW,
GC.Collect() metode pasukan garbage collector untuk menjalankan dan mungkin melepaskan setiap
referensi yang RCW masih memiliki. The
GC.Collect() metode mencoba untuk merebut kembali memori maksimum yang tersedia. Perhatikan bahwa
ini tidak menjamin bahwa semua memori akan direklamasi.
ID Artikel: 317109 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual C# .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
- Microsoft Visual C# .NET 2002 Standard Edition
| kbautomation kbprb kbmt KB317109 KbMtid |
Penerjemahan MesinPENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:
317109
(http://support.microsoft.com/kb/317109/en-us/
)