FILESYSTEMWATCHER X WEBBROWSER

FOXMAN 08/08/2012 22:01:24
#407540
Amigos, estou apanhando um bocado para conseguir fazer estes dois obejtos trabalharem [Ô]SEM BRIGA[Ô].
Preciso ficar monitorando uma pasta(Isso faço com o FileSystemWatcher), e caso um novo arquivo seja criado nessa pasta eu deveria
imprimi-lo, mas isso sem intervenção do usuário. E o único objeto que achei interessante que imprime(HTML) direto para impressora PADRÃO é o WEBBROWSER.
Acontece que se eu etiver monitorando o diretorio, e encontrar um novo arquivo criado, é necessário fazer uma gambiarra para conseguir imprimir o dito cujo.
Alguém tem alguma idéia melhor e mais eficaz de imprimir um HTML diretamente assim que ele for criado em uma determinada pasta ?????
Aceito sugestões e exemplos, pois tudo o que consegui fazer foi abrir o html no objeto webbroser assim que criado, porém a impressão não ficou direta.

Ah, antes que eu me esqueça, o que ocorre é um conflito de threads.

Citação:

ActiveX control [ô]8856f961-340a-11d0-a96b-00c04fd705a2[ô] cannot
be instantiated because the current thread is not in a
single-threaded apartment.



Já tentei algumas soluções que encontrei na net mas sem sucesso.

JABA 08/08/2012 23:07:02
#407542
Para capturar os dados das threads, você poderia usar o backgroundworker para sincronizar esses dados.

http://www.macoratti.net/vbn5_ept.htm

ou então trabalhar com delegates diretamente:

http://www.macoratti.net/10/01/threading.htm
http://www.jorgepaulino.com/2008/03/trabalhando-com-threads-multi-tarefas.html

vlw
NILSONTRES 09/08/2012 00:17:58
#407546
Citação:

ActiveX control [ô]8856f961-340a-11d0-a96b-00c04fd705a2[ô] cannot
be instantiated because the current thread is not in a
single-threaded apartment.



Coloca isso no Load do Form.
CheckForIllegalCrossThreadCalls = False
FOXMAN 09/08/2012 10:17:03
#407558

Citação:

:
ActiveX control [ô]8856f961-340a-11d0-a96b-00c04fd705a2[ô] cannot
be instantiated because the current thread is not in a
single-threaded apartment.

Coloca isso no Load do Form.
CheckForIllegalCrossThreadCalls = False

Citação:

:
Para capturar os dados das threads, você poderia usar o backgroundworker para sincronizar esses dados.

http://www.macoratti.net/vbn5_ept.htm

ou então trabalhar com delegates diretamente:

http://www.macoratti.net/10/01/threading.htm
http://www.jorgepaulino.com/2008/03/trabalhando-com-threads-multi-tarefas.html

vlw



Nilson, já utilizo essa propriedade e setada como False.

Já tentei com backgroundworker e tbem não foi.

Já pensei em até fazer um PROG, pois talvez seja mais fácil eu ficar dando um loop num diretorio, e qdo encontrar o bendito arquivo, imprimi-lo, e imediatamente exclui-lo ou move-lo.





JABA 09/08/2012 12:28:19
#407578
FoxMan, coloque a parte do código das threads que está dando conflito pra podermos analisar melhor. Talvez lançando um evento nas threads e captura-las fora seja uma das soluções. Esse tipo de coisa geralmente se resolve utilizando Delegate. é só utilizar o beginInvoker e verificar se o dito cujo está na mesma thread.

vlw
KERPLUNK 09/08/2012 13:48:46
#407583
Veja se isto te ajuda
FOXMAN 09/08/2012 14:23:47
#407587
Citação:

:
FoxMan, coloque a parte do código das threads que está dando conflito pra podermos analisar melhor. Talvez lançando um evento nas threads e captura-las fora seja uma das soluções. Esse tipo de coisa geralmente se resolve utilizando Delegate. é só utilizar o beginInvoker e verificar se o dito cujo está na mesma thread.

vlw



JABA, este é apenas um dos inumeros que tentei , e sem sucesso.Devo ter mais uns 3 projetos com codigos diferentes.
O projeto está todo aí, apenas tem um objeto webbrowser neste formulario.

A ideia inicial era criar um Windows Service, mas....não deu. (AINDA)


   Dim WithEvents Arquivo As New FileSystemWatcher()
Private Shared WithEvents f As New frmImpressaoBoleto()

Private Sub frmImpressaoBoleto_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Arquivo.Path = [Ô]C:\BOLETO[Ô]
Arquivo.IncludeSubdirectories = False
Arquivo.Filter = [Ô]*.html[Ô]
Arquivo.NotifyFilter = NotifyFilters.FileName
Arquivo.EnableRaisingEvents = True
CheckForIllegalCrossThreadCalls = False
End Sub
Private Shared Sub inFile_All(ByVal sender As Object, ByVal e As FileSystemEventArgs) Handles Arquivo.Created
Try
pathfile = e.FullPath
[ô]teste
[ô]f = New frmImpressaoBoleto()
[ô]f.WindowState = FormWindowState.Maximized
[ô]f.WebBrowser.Url = New System.Uri(pathfile, System.UriKind.Absolute)
[ô]f.WebBrowser.Show()
Dim MyThread As System.Threading.Thread
MyThread = New System.Threading.Thread(AddressOf LaunchForm)
MyThread.SetApartmentState(Threading.ApartmentState.STA)
MyThread.Start()
Catch ex As Exception
MessageBox.Show(ex.Message.ToString)
End Try
End Sub

Public Shared Sub LaunchForm()
f = New frmImpressaoBoleto()
f.WindowState = FormWindowState.Maximized
f.WebBrowser.Url = New System.Uri(pathfile, System.UriKind.Absolute)
f.WebBrowser.Print()
Application.Run(f)
End Sub




kERPLUNK, não consegui testar o exemplo pois não veio duas DLL.
Lembrando que o projeto não consiste apenas em abrir o html e imprimi-lo através de um botão.

A concepção do projeto é checar se um arquivo foi criado , e imprimi-lo automaticamente sem intervenção do usuário.

Eu consigo checar o arquivo, abrir o form com o html montado, apenas jogando o html na pasta desejada, porém a impressão automática somente está ocorrendo
se eu iniciar uma manual, ou seja. Observei que o projeto até funciona, mas teria que dar um [Ô]START[Ô] para que ele andasse sozinho.

Observei também que a impressão não ocorre automaticamente, por conta de o codigo HTML não ter sido totalmente carreado, coloquei uma condição para chamar o print após o carregamento total do html, mas ainda continua com bug.
Ora, imprime, ora não imprime.
O teste pode ser executado com qualquer arquivo html.




JABA 09/08/2012 16:59:59
#407595
FoxMan, vê se é assim que você quer.

Nesse exemplo, ele está criando um novo form, sendo assim, a cada novo html jogado na pasta, vai ser exibido em outro form.

veja ai e nos dê um feedback

vlw
FOXMAN 09/08/2012 17:14:14
#407597
Citação:

:
FoxMan, vê se é assim que você quer.

Nesse exemplo, ele está criando um novo form, sendo assim, a cada novo html jogado na pasta, vai ser exibido em outro form.

veja ai e nos dê um feedback

vlw



JABA, agradeço pelo retorno.

Então, esse exemplo eu até já tinha feito também, inclusive com o DedoDuro, rsrsrs. Mas tipo, o problema não é abrir o arquivo e exibi-lo, o problema é imprimir sem a intervenção do usuário.

Veja bem, se vc criar um objeto webbrowser num formulario, e setar no load que ele irá abrir tal arquivo, e após o carregamento total do arquivo vc enviar para impressora através da
propriedade .Print(), ele vai para impressora padrão sem mostrar Dialogo com o usuario.

Tipo assim :

Me.WebB.Url = New System.Uri([Ô]c:\boleto\xxxxx.html[Ô], System.UriKind.Absolute)
Me.WebB.Print()


Se a pagina ja estiver sido totalmente carregada será impresso, no exemplo assima não coloquei tal verificação.

O problema de tudo isso até agora é imprimir diretamente assim que jogar o arquivo no diretorio.


JABA 09/08/2012 17:31:59
#407599
Ok. Eu acho que o problema no teu codigo é que dentro do frmImpressaoBoleto você usa o FileSystemWatcher e quando você cria esse formulário novamente em --> Sub LaunchForm(), você está criando outro monitoramento, pois FileSystemWatcher está sendo executado no Load do form. Talvez seja por isso que esteja dando conflito. Já que se trata de monitorar um unica pasta, então não há necessidade de criar o form com o FileSystemWatcher outra vez. Por isso que no exemplo que te passei, eu criei outro Form e tirei o FileSystemWatcher dele (a responsabilidade de monitorar ficou toda com Form1) e coloquei o webbrowser lá. Assim, eu acho que não teremos mais conflitos.

Pelo Fom1 que te passei, dá para fazer todo o controle utilizando o seus eventos, pois todo arquivo criado, deletado, alterado, na pasta boleto, vai ativar um desses eventos em Form1 sempre. é só pegar o contéudo ali e mandar imprimir.

vlw


JABA 09/08/2012 17:39:06
#407600
Aqui tem algo que posso te ajudar também:

http://www.macoratti.net/vbn5_uwb.htm

vlw
Página 1 de 3 [24 registro(s)]
Tópico encerrado , respostas não são mais permitidas