嘿家伙我有一个小问题,我似乎无法弄明白.我将DataGridView(它的内容)保存到xls文件.我没有遇到任何问题,除了我的任务管理器,它仍然显示它正在运行.我打过电话:
xlApp.Application.Quit()
Run Code Online (Sandbox Code Playgroud)
这被声明为:
Dim xlApp As New excel.Application
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,但这与我让用户选择将其导出到Word文档时退出的方式相同.我不知道我哪里错了...
这是我的完整代码
Imports Word = Microsoft.Office.Interop.Word
Imports Excel = Microsoft.Office.Interop.Excel
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For x As Integer = 1 To 3500
DataGridView1.Rows.Add(New Object() {"r" & x.ToString & "c1", "r" & x.ToString & "c2", "r" & x.ToString & "c3", "r" & x.ToString & "c4", "r" & x.ToString & "c5"})
Next
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As …Run Code Online (Sandbox Code Playgroud) 这是一个非常常见的问题,我决定问这个问题,因为这个问题在今天可能会有不同的答案.希望这些答案有助于理解使用COM对象的正确方法.就个人而言,在对此主题发表不同意见后,我感到非常困惑.
在过去的5年中,我曾经使用COM对象,规则对我来说非常清楚:
你们中的一些人在阅读完最后一行后可能会感到沮丧,这就是我所知道的如何正确创建/发布Com对象,我希望能得到更清晰无误的答案.
以下是我在这个主题上找到的一些链接.他们中的一些人告诉他们需要调用ReleaseComObject而其中一些不需要.
"...在VSTO场景中,您通常不必使用ReleaseCOMObject......."
"...您应该使用此方法释放包含引用的基础COM对象......"
更新:
这个问题被标记为过于宽泛.根据要求,我将尝试简化并提出更简单的问题.
我从这个答案中获取了以下工作代码:
Option Compare Binary
Option Explicit On
Option Infer On
Option Strict Off
Imports Microsoft.Office.Interop
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
Friend Module Module1
Private Declare Function GetDesktopWindow Lib "user32" () As IntPtr
Private Declare Function EnumChildWindows Lib "user32.dll" (ByVal WindowHandle As IntPtr, ByVal Callback As EnumWindowsProc, ByVal lParam As IntPtr) As Boolean
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hWnd As IntPtr, ByVal lpClassName As String, ByVal nMaxCount As Integer) As Integer
Private Delegate Function EnumWindowsProc(ByVal hwnd As …Run Code Online (Sandbox Code Playgroud)