在线急等,寻求多线程下的解决办法。

robake 2008-12-05 06:47:43
以下为我的程序里的部分代码:
此部分代码启动IE进程,当单线程的情况下,没有任何问题,发现线程只要是达到2个以上就或多或少程序报错,并且线程数目越高报错机率越大。我检查发现是多线程情况下,无法绑定该线程启动的IE进程,请教线程如何判断哪个IE进程是它启动的。

Dim startInfo As New ProcessStartInfo("IExplore.exe")
startInfo.WindowStyle = ProcessWindowStyle.Maximized

startInfo.Arguments = url

Dim p As New Process
p.Start(startInfo)
'Process.Start(startInfo)
Dim allBrowsers As SHDocVw.ShellWindows = New SHDocVw.ShellWindows
Dim ie As InternetExplorer
'Exit Sub
myProcesses = Process.GetProcesses()
Threading.Thread.Sleep(5000)
'MsgBox(myProcesses.Count)
Dim i As Integer = 0

While i < allBrowsers.Count
Dim ev As InternetExplorer = DirectCast(allBrowsers.Item(i), InternetExplorer)
MsgBox(ev.LocationURL)

Try
If InStr(allBrowsers.Item(i).LocationURL, url) <> -1 Then
ie = DirectCast(allBrowsers.Item(i), InternetExplorer)
End If
Catch ex As Exception
'MsgBox(ex.Message)
End Try
i += 1
End While
...全文
91 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
robake 2008-12-26
  • 打赏
  • 举报
回复
楼上各位,调用IE好像和其他的程序不一样,我把调用的程序改成其他程序时基本没有报错,唯独IE报错太多。
yangmt204 2008-12-08
  • 打赏
  • 举报
回复
下面是获取一个应用程序的ID,并通过ID激活窗体的代码。
(如果你是用vs2005来写代码,那你可以vb里面的写代码的地方:点右键->插入代码段->应用程序-编译,资源和设置->按进程ID激活应用程序,这样就能看到一些你想要的代码了。)
Dim processID As Integer
processID = Shell("NOTEPAD.EXE", AppWinStyle.NormalFocus)
AppActivate(processID)

twtetg 2008-12-07
  • 打赏
  • 举报
回复
UP
yangmt204 2008-12-07
  • 打赏
  • 举报
回复
最好是声明一个 ArrayList 对象来存储你打开的 IExplore.exe对象
每个进程都有一个唯一的id,
只要你判断你目前调用的进程的id 是否等于 arraylist对象中的 IExplorer.exe的id就行了
dylike 2008-12-05
  • 打赏
  • 举报
回复
==>添加一句: On Error Resume Next
Dim startInfo As New ProcessStartInfo("IExplore.exe")
whoami333 2008-12-05
  • 打赏
  • 举报
回复
Mark.

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧