Pergunta

eu tenho um enorme editor VB6 legado com muitas bibliotecas 3o partido e controles e, recentemente, há uma necessidade de configurá-lo para torná-lo de multi fio para que eu possa executar algumas outras formas independentemente da forma principal do editor. Basicamente não há comunicação mínima entre essas outras formas e o editor principal exceto para executar as outras formas em um clique de um botão na página principal.

Assim, a partir de um monte de googling eu encontrei um método que converte o aplicativo atual em um multi uma rosca, definindo-se como um exe ActiveX e adicionando um conjunto de classe para-multi-uso global para permitir que isso aconteça. Agora ao fazer a edição e testar através do modo de depuração, eu achei que quando eu sair um monte de acidente estranho vai acontecer às vezes.

'main.frm - button click call
'On the button click, create a new object
Set obj = CreateObject("MyApp.clsThread")
Call obj.NewThread

'clsThread
' Create a new form and load it to run on a new thread
Public Sub NewThread()
    Dim frm As Object
    Set frm = New frmDogbert
    Load frmDogbert
    frm.show
    Set frm = Nothing
End Sub

Então o que eu absolutamente deve saber quando eu faço isso, i. problemas potenciais, etc ?, como eu estou temendo que o aplicativo parece estar ficando mais instável. Ou há uma maneira melhor de fazer isto?

Atualizações:

Em vez de força cortando meu aplicativo em um pseudo multithreading aplicativo, eu tenho tomado os conselhos das pessoas boas aqui e refatorar o componente em exe padrão e revertido meu aplicativo para um exe padrão e chamá-los via shell. Funciona lindamente:)

Graças

Foi útil?

Solução

Visual Basic 6 não é multi threading em si mesmo. A diferença no comportamento de multi-tarefas entre um EXE ActiveX e uma DLL ActiveX é apenas aparentes quando referenciado de outra VB6 EXE. Objetos instanciado a partir de uma Multi-Uso de classes global definido em uma corrida ActiveX EXE em seu próprio contexto. Objeto instanciado a partir de uma DLL ActiveX são executados no contexto do EXE chamando.

Agora, multi-threading pode ser cortado em VB6, mas é muito delicado e tem um monte de não (por exemplo, você não pode usar o botão de parada no IDE para parar uma sessão de depuração ou o programa irá falhar) .

O que um ActiveX EXE é bom é para desova uma instância separada mas relacionada que pode ser executado separadamente sem interromper o programa principal. Com base na sua descrição breve eu diria seu melhor melhor é manter o EXE como é, mas mais os formulários / módulos / classes para um EXE separado e têm a referência EXE original ActiveX EXE.

Note que você não tem que compilar para baixo para .EXE pode alterar a extensão .dll e ainda é um EXE ActiveX. Você fazer isso para que o usuário não mistakely executar o ActiveX EXE por si só.

Outras dicas

Você pode esclarecer a questão um pouco? Eu não entendo por que ele precisa ser multi-threaded? Porque você não pode apenas exibir as formas não-modal, em seguida, todos eles vão ser visível e sensível ao mesmo tempo. A menos que você tenha algum processamento em segundo plano operando o tempo todo em sua forma principal, que soa improvável de sua pergunta como seria trancar a forma principal, bem como os outros.


Melaos diz: Bem, a principal frm editor é a principal coisa aqui e eu preciso para permitir que o usuário execute formas adicionais para fazer algumas outras coisas como as coisas upload para nossos arquivos de vídeo convertido servidor e para outros formatos. E essas formas usar shell para chamar outros exes. E o tempo de execução demora um certo tempo.


Nesse caso, eu recomendo fazer as outras formas em EXEs separadas ao invés de uso multithreading, que é difícil. Você diz que há pouca comunicação do formulário principal para os subformulários - isso só mostra-los. Portanto, você não precisa mesmo de fazer os subformulários ActiveX EXEs. Apenas torná-los EXEs padrão e desembolsar los a partir do formulário principal.

Não faça isso. Multithreading é incrivelmente complexa para fazer corretamente, mesmo quando se usa ferramentas que são destinados para o mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top