100分相送,怎样让程序在上一行代码执行完成后再执行下一行代码呀...

gopark 2005-05-27 08:23:39
我的一个程序要放完一个MP3后关闭该窗体,
PlayMP3() '调用API播放MP3
Me.Close
现在是不等MP3放完,Me 就Close了,有办法解吗?
...全文
341 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zm864680106 2010-06-16
  • 打赏
  • 举报
回复
学习……
gopark 2005-05-27
  • 打赏
  • 举报
回复
都是牛人啊,崇拜中...
100分已不足已表达我对诸位的滔滔江水,中午我会再开一送分贴,敬请留意...
Snrmnm_sx 2005-05-27
  • 打赏
  • 举报
回复
这是之前的相关声明
Option Strict Off
Option Explicit On
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO
Imports VB = Microsoft.VisualBasic

这个小程序经调试通过!环境为:WINDOWS XP 5.1 .NET 2003
Snrmnm_sx 2005-05-27
  • 打赏
  • 举报
回复
接着上楼的!
Private Sub Form1_Closed(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Closed
Dim i As Short
For i = 0 To List1.Items.Count - 1
Call INIWriteString("列表框", "歌曲" & i, VB6.GetItemString(List1, i), VB6.GetPath & "\song.ini")
Next i
End Sub

Private Sub List1_DoubleClick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles List1.DoubleClick
Call Command1_Click(Command1, New System.EventArgs)
End Sub

Private Sub MPlayer1_EndOfStream(ByVal result As Integer)
Dim i As Short
i = List1.SelectedIndex
i = i + 1
If i > List1.Items.Count - 1 Then i = 0
List1.SelectedIndex = i
MPlayer1.FileName = VB6.GetItemString(List1, List1.SelectedIndex)
Call Read_TAG(MPlayer1.FileName, s1, s2, s3, s4, s5, s6) : Call Show_Tag()
Label4.Text = Text1(0).Text
End Sub

Sub Show_Tag()
Text1(0).Text = s1 '歌名
Text1(1).Text = s2 '歌星
Text1(2).Text = s3 '专辑
Text1(3).Text = s4 '出版年
Text1(4).Text = s5 '说明
Text1(5).Text = CStr(s6) '校验码
End Sub

Private Sub Slider1_Scroll(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Slider1.Scroll
MPlayer1.Volume = Slider1.Value - 2500
End Sub

Private Sub Timer1_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer1.Tick
Dim d1, d2 As Short
Dim m1, s1 As Short
Dim m2, s2 As Short
d1 = MPlayer1.CurrentPosition
d2 = MPlayer1.Duration

m1 = d1 \ 60
s1 = d1 Mod 60
m2 = d2 \ 60
s2 = d2 Mod 60

Label3.Text = m1 & ":" & VB6.Format(s1, "00") & " (" & m2 & ":" & VB6.Format(s2, "00") & ")"
End Sub

Private Sub Timer2_Tick(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Timer2.Tick
If VB6.PixelsToTwipsX(Label4.Left) < 0 - VB6.PixelsToTwipsX(Label4.Width) Then

Label4.Left = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Picture1.Width) - 1)
Label4.Left = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Label4.Left) - 5)
Else
Label4.Left = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Label4.Left) - 10)
End If
End Sub

Function Read_TAG(ByRef fname As String, ByRef 歌名 As String, ByRef 歌星 As String, ByRef 专辑名称 As String, ByRef 出版年 As String, ByRef 说明 As String, ByRef 校验码 As Byte)
Dim i As Short, j As Short
Dim k As String
i = FreeFile()

Dim x(127) As Byte

FileOpen(i, fname, OpenMode.Binary, OpenAccess.Read)
'跳到倒数第128位元组
Seek(i, LOF(i) - 127)
'读取127个字符
FileGet(i, x)
'关闭文件
FileClose(i)
If LCase(Chr(x(0)) & Chr(x(1)) & Chr(x(2))) <> "tag" Then
Read_TAG = False
歌名 = ""
歌星 = ""
专辑名称 = ""
出版年 = ""
说明 = ""
校验码 = 0
Exit Function
End If

歌名 = ""
For j = 3 To 32
If x(j) < 128 Then k = Chr(x(j)) Else k = Chr("&H" + Hex(x(j)) + Hex(x(j + 1))) : j = j + 1
歌名 = 歌名 + k
Next
歌星 = ""
For j = 33 To 62
If x(j) < 128 Then k = Chr(x(j)) Else k = Chr("&H" + Hex(x(j)) + Hex(x(j + 1))) : j = j + 1
歌星 = 歌星 + k
Next
专辑名称 = ""
For j = 63 To 92
If x(j) < 128 Then k = Chr(x(j)) Else k = Chr("&H" + Hex(x(j)) + Hex(x(j + 1))) : j = j + 1
专辑名称 = 专辑名称 + k
Next
出版年 = ""
For j = 93 To 96
If x(j) < 128 Then k = Chr(x(j)) Else k = Chr("&H" + Hex(x(j)) + Hex(x(j + 1))) : j = j + 1
出版年 = 出版年 + k
Next
说明 = ""
For j = 97 To 126
If x(j) < 128 Then k = Chr(x(j)) Else k = Chr("&H" + Hex(x(j)) + Hex(x(j + 1))) : j = j + 1
说明 = 说明 + k
Next

校验码 = x(127)

Read_TAG = True
End Function

Function INIReadString(ByRef app As String, ByRef keyw As String, ByRef val_Renamed As String, ByRef inifile As String) As String
Dim i As Integer
Dim k As String
k = New String(" ", 255)
i = GetPrivateProfileString(app, keyw, val_Renamed, k, Len(k), inifile)
k = Trim(k) : k = VB.Left(k, Len(k) - 1)
INIReadString = k
End Function

Sub INIWriteString(ByRef app As String, ByRef keyw As String, ByRef val_Renamed As String, ByRef inifile As String)
Dim xx As Short
xx = WritePrivateProfileString(app, keyw, val_Renamed, inifile)
End Sub
Snrmnm_sx 2005-05-27
  • 打赏
  • 举报
回复
兄弟这是我做的一个小播放器的代码,很简单,希望能帮上你的忙!
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As String) As Integer
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Integer

Dim s2, s1, s3 As String
Dim s4, s5 As String
Dim s6 As Byte

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
If List1.SelectedIndex < 0 Then List1.SelectedIndex = 0
Call Read_TAG(VB6.GetItemString(List1, List1.SelectedIndex), s1, s2, s3, s4, s5, s6) : Call Show_Tag()
MPlayer1.FileName = VB6.GetItemString(List1, List1.SelectedIndex)
MPlayer1.Play()
Label4.Text = Text1(0).Text
Picture1.Visible = True : Timer2.Enabled = True

End Sub

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
MPlayer1.Stop()
Picture1.Visible = False : Timer2.Enabled = False

End Sub

Private Sub Command3_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command3.Click
Try
Dim f As String
Dim Result As Windows.Forms.DialogResult
'设置对话框标题
OpenFileDialog1.Title = "打开文件"
'设置Filter文件筛选器
OpenFileDialog1.Filter = "MP3格式(*.MP3)|*.MP3|wav格式(*.wav)|*.wav|mid格式(*.mid)|*.mid|所有文件(*.*)|*.*"
'打开对话框,注意标准对话框都是有模式的打开
Result = OpenFileDialog1.ShowDialog()
'如果单击了“打开”按钮并且FileName不为空时,打开RichTextBox文件
If Result = DialogResult.OK And Len(OpenFileDialog1.FileName) > 0 Then
Me.Label1.Text = OpenFileDialog1.FileName
End If
If OpenFileDialog1.FileName <> "" Then
f = OpenFileDialog1.FileName
List1.Items.Add(f)
End If

'End With
Catch Exc As System.OverflowException
MsgBox("aaaaaaaaaaaa")
End Try

End Sub

Private Sub Command4_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command4.Click
If List1.SelectedIndex < 0 Then Exit Sub
List1.Items.RemoveAt(List1.SelectedIndex)
End Sub

Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
Dim i As Short
Dim s As String
MPlayer1.Visible = False
Slider1.Value = MPlayer1.Volume
For i = 0 To 32000
s = INIReadString("列表框", "歌曲" & i, "", VB6.GetPath & "\song.ini")
If s = "" Then Exit For
List1.Items.Add(s)
Next i
Me.Text = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name
End Sub
淡蓝色2 2005-05-27
  • 打赏
  • 举报
回复
我不知道还有什么语言比VB.net2005更方便。
看 只需下面一条语句就能达到楼主的目的.

My.Computer.Audio.Play("XXXX.mp3", AudioPlayMode.WaitToComplete)
真相重于对错 2005-05-27
  • 打赏
  • 举报
回复
看看这个,对你有帮助

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfSystemDiagnosticsProcessClassWaitForExitTopic.htm
tl_pear 2005-05-27
  • 打赏
  • 举报
回复
可以参照一下哦!
http://dev.csdn.net/develop/article/62/62047.shtm
ranzige 2005-05-27
  • 打赏
  • 举报
回复
可以考虑用一个timer
到了以后就me.close
gopark 2005-05-27
  • 打赏
  • 举报
回复
回楼上:
我就是想知道如何判断MP3已放完,API函数中好像没找到相关的方法和事件...
APP开发王 2005-05-27
  • 打赏
  • 举报
回复
PlayMP3() '调用API播放MP3
Me.Close

哎呀,你怎么搞的嘛,肯定不会等你播放完了才close嘛!
判断
方法是你的歌曲是否已经放完,再调用me.close!和楼上的差不多!
孟子E章 2005-05-27
  • 打赏
  • 举报
回复
播放器播放完毕后触发事件的,在这个事件里关闭
3tzjq 2005-05-27
  • 打赏
  • 举报
回复
最好是能得到播放文件所用时间的长度,然后用Timer来倒记时。
"管家婆加密狗读写工具"是一款专门针对管家婆软件的辅助工具,旨在帮助用户进行加密狗的读取和写入操作。加密狗是一种硬件设备,通常用于软件的授权管理,确保只有拥有正确密钥的用户才能运行特定的软件。在IT行业中,这种技术被称为硬件锁或USB Dongle,它通过USB接口连接到计算机,存储了软件的许可证信息。 管家婆软件是一款广泛应用于中小企业财务管理、进销存管理、生产管理等领域的应用软件。它的不同版本可能需要不同的加密狗来验证用户的使用权。"适用于多种版本"表明这款工具兼容管家婆的多个产品版本,为用户提供了一站式的加密狗管理解决方案。 "已测试可用"意味着开发者或提供者已经对这个工具进行了实际的测试,确保它在实际环境中可以正常工作。这是非常重要的,因为它给用户带来了一定程度的信任,表明该工具在使用时不会出现严重的兼容性问题或功能失效。 "要有狗才能用哦"这一提示强调了加密狗是必不可少的,没有加密狗,这个读写工具将无法执行其功能。这意味着用户必须拥有合法的管家婆加密狗才能使用这个工具,否则将无法进行任何读写操作。 从压缩包中的文件名"管家婆写狗(R4ND全集)无壳版.exe"可以看出,这是一个针对管家婆软件的写狗工具,而且是"无壳版"。"无壳版"通常指的是软件去除了保护壳,即没有额外的防逆向工程措施,这可能使工具更易于理解和使用,但同时也可能让软件更容易被破解。"R4ND全集"可能表示这个工具包含了针对各种随机情况的全面支持,比如处理各种类型的加密狗或者各种数据写入需求。 "管家婆加密狗读写工具"是为了解决管家婆软件用户在加密狗管理上的问题而设计的,它具备广泛的版本兼容性,并经过了实际测试,确保功能的稳定性和可靠性。用户需要拥有管家婆的加密狗才能使用此工具进行读写操作,而提供的无壳版本可能方便了用户进行更深入的使用或调试。然而,使用无壳版工具也需谨慎,因为这可能会增加软件被非法利用的风险。
【PA1实验报告1】是关于计算机系统和软件开发的一个实验项目,主要涵盖了以下几个关键知识点: 1. **指令集架构**:实验的目标之一是熟悉指令集的架构。指令集是计算机处理器理解和执行的基本命令集合,它定义了处理器如何处理数据和控制硬件。在这里,虽然可以选择不同的指令集,如RISC-V或x86,但因为实现多个指令集的复杂性,实验选择了x86。x86架构是一种复杂的CISC(复杂指令集计算)架构,包含了大量的单条指令,可以执行多种操作。 2. **图灵机原理**:图灵机是一种理论计算模型,用于描述通用计算能力的极限。在实验中,探究图灵机的运行原理意味着理解其基本操作,包括如何读取和修改存储带上的符号,以及如何根据当前状态和读取的符号来改变状态和移动读写头。 3. **调试器的工作原理**:调试器是软件开发中的重要工具,用于检查和控制程序执行。实验要求用代码模拟寄存器结构,实现调试器的基本功能。这包括设置断点、单步执行、查看寄存器和内存状态等。调试器的工作原理涉及追踪程序执行流程,中断执行以便分析,并能恢复执行以继续调试。 4. **寄存器结构模拟**:在x86架构中,有不同大小的寄存器,如32位、16位和8位寄存器。实验要求使用`union`结构来模拟这些寄存器,因为`union`可以在同一内存空间中存储不同大小的数据类型,从而反映x86寄存器的共用特性。例如,EAX寄存器可以视为AX、AH和AL的组合。 5. **NEMU模拟器**:NEMU是一个程序模拟器,它的目的是使其他程序能够在NEMU上运行,就像在真实的硬件上一样。实验中提到的`init_monitor()`函数是NEMU启动时调用的关键初始化函数,负责处理参数解析、日志文件初始化、镜像加载和ISA相关的初始化工作。`load_img()`函数用于加载客户程序的镜像,而`init_isa()`则涉及CPU状态的初始化,包括寄存器的设置。 6. **内存管理**:实验中提到了固定内存位置0x10000来加载客户镜像,以及抽象出来的API如`isa_default_img[]`和`isa_default_img_size`,这些API简化了镜像加载和内存管理。 7. **设备初始化**:`init_device()`函数用于初始化设备,这是模拟真实计算机环境的关键部分,因为模拟器需要模拟I/O设备以处理输入输出操作。 8. **断点和监视点**:实验还要求实现监视点功能,即断点。断点是调试中的一个关键元素,允许在特定代码行暂停程序执行,以便检查程序的状态。 这个实验全面地覆盖了计算机系统的基础知识,从底层的指令集到高级的调试技术,旨在加深学生对计算机系统运行机制的理解,并提供实践经验。通过这样的实验,学生不仅能够学习到理论知识,还能提升实际编程和解决问题的能力。
Nexus是Sonatype公司开发的一款强大的 Maven仓库管理器,它集成了Maven仓库代理、存储库聚合以及组件发布等功能,广泛应用于Java开发者的构建和部署流程中。标题"nexus-3.30.0-01-win64.zip"表示的是Nexus 3的30.0.0.1版本的Windows 64位安装包,这通常用于在Windows操作系统上搭建和管理本地或企业级的Maven仓库。 描述中提到可以从官方网站下载,这确保了软件来源的正规性与安全性。下载地址是https://help.sonatype.com/repomanager3/download/,这是Sonatype官方的帮助页面,用户可以在此获取最新版本的Nexus Repository Manager及其相关的文档和资源。 Nexus的核心功能包括: 1. **代理仓库**:Nexus可以作为Maven中央仓库的代理,减少对互联网的直接访问,提高开发效率。通过配置,它可以缓存远程仓库中的组件,本地团队可以快速获取所需依赖。 2. **存储库聚合**:允许用户将多个存储库(如Maven、npm、NuGet等)组合成一个逻辑组,便于管理和查找组件。 3. **组件发布**:开发者可以使用Nexus发布自己的软件组件,确保版本控制和权限管理。 4. **安全控制**:Nexus提供了精细的访问控制策略,可以限制不同用户或团队对不同存储库的访问权限。 5. **质量检查**:内置的构件验证功能可以检查上传的组件是否符合预设的规则,比如POM格式正确性、签名验证等。 6. **搜索与浏览**:Nexus提供图形界面,方便用户搜索、浏览和管理仓库中的组件。 7. **持续集成**:与CI/CD工具如Jenkins、GitLab CI/CD等集成,自动化构建和部署过程。 8. **版本管理**:支持SNAPSHOT版本的管理,方便进行开发阶段的版本迭代。 压缩包内的两个主要文件“sonatype-work”和“nexus-3.30.0-01”可能是Nexus的安装目录结构。"sonatype-work"通常包含Nexus运行时的数据和配置,如数据库连接信息、日志文件等;而"nexus-3.30.0-01"可能是Nexus的可执行程序和配置文件,用于启动和配置服务。 在安装和配置Nexus时,用户需要注意以下几点: - 安装路径应避免有空格和特殊字符,以防运行时出现问题。 - 配置文件通常位于“nexus-3.30.0-01/conf”目录下的“nexus.properties”,根据实际需求进行修改。 - 启动Nexus通常需要指定JAVA_HOME环境变量,确保使用的是兼容的Java版本。 - 需要创建并配置至少一个仓库,如Maven公共仓库的代理,以便开始使用。 - 对于生产环境,应考虑设置备份策略,防止数据丢失。 Nexus作为一款强大的软件仓库管理工具,对于Java开发者和企业来说,是构建高效、安全的软件供应链的重要组成部分。通过正确配置和使用,能够大大提高软件开发和发布的效率,同时保障组件的质量和安全性。

16,722

社区成员

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

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