Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Simple said I have two programs. One is a EXE and the other is an addin for Word.

 

If the EXE is called, it starts word and uses functions etc. of the addin.

 

Maybe some code may help

 

This is the EXE

   '[...]
   Call mAddin.Object.DokumentDazu2(...)
   mAddin.Object.udtExternCalls.item(GetCurrentProcessID).objExternCall = CType(Me.objExternCall, ExternCall)

   'mAddin.Object.objThread.Join()

   blnAddinCallEnd = False
   blnAddinCallError = False
   blnAddinCallEnd = WaitForProcessCallEnd(blnAddinCallError)
   blnAddinCallEnd = True 'md070503

 

And this is the addin

 
Public Function DokumentDazu2(....) As String
   Dim strDatei As String
   Dim udtExternCall As ExternCall
   Try
       Me.blnNewExternCall(intID)
       udtExternCall = Me.udtExternCalls.Item(intID)
       If Not udtExternCall Is Nothing Then
           udtExternCall.blnInParameter = blnVorlageGegeben
           udtExternCall.strInParameter = strNewBlobKey
           udtExternCall.intInParameter = intDruckAnzahl
           System.Threading.Thread.CurrentThread.ApartmentState = System.Threading.ApartmentState.STA
           udtExternCall.objThread = New Threading.Thread(AddressOf DokumentDazuSTA)
           udtExternCall.objThread.ApartmentState = System.Threading.ApartmentState.STA
           udtExternCall.objThread.Name = CStr(intID)
           udtExternCall.objThread.Priority = ThreadPriority.AboveNormal
           udtExternCall.objThread.Start()
       End If
   Catch
       ErrorMessage(...)
   End Try

   Return strDatei
End Function

Public Sub DokumentDazuSTA()
   Dim strDatei As String
   Dim udtExternCall As ExternCall
   Dim strThreadName As String
   Try
       Call blnCheckApartmentState()
       strThreadName = System.Threading.Thread.CurrentThread.Name
       udtExternCall = Me.udtExternCalls.Item(CInt(strThreadName))
       objThread = System.Threading.Thread.CurrentThread
       If Not udtExternCall Is Nothing Then
           strDatei = mudtSchnittstelle.DokumentDazu(Me, udtExternCall.blnInParameter, udtExternCall.strInParameter, udtExternCall.intInParameter)
           udtExternCall.strOutParameter = strDatei
           udtExternCall.strOutParameter2 = udtExternCall.strInParameter
           udtExternCall.intIDEnd = CInt(strThreadName)
           udtExternCall.blnWordQuit = objIBS_INIT.udtExternCalls.blnWordQuit
           If Not udtExternCall.objExternCall Is Nothing Then
               udtExternCall.objExternCall.strOutParameter = udtExternCall.strOutParameter
               udtExternCall.objExternCall.strOutParameter2 = udtExternCall.strOutParameter2
               udtExternCall.objExternCall.blnWordQuit = udtExternCall.blnWordQuit
               udtExternCall.objExternCall.intIDEnd = udtExternCall.intIDEnd
           End If
       End If
       Me.udtExternCalls.Delete(CInt(strThreadName))
       DoEvent()
   Catch
       ErrorMessage(...)
   End Try
End Sub

 

It seems to work, but only on fast computers. I think waiting for the end of the thread started within the addin makes the whole program very slow. I tried a endless loop and thread.join to wait for the end; no difference.

 

Any idea? I read a lot of monitor and mutex etc. but nothing helps.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...