热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#程序运行出现未响应

做的一个小的MP3播放器,用usingSystem.Windows.Forms.Timer这个来计时,获取当前歌曲播放的位置(播放时间),并显示到窗体上.当我运行程序,点击一首歌曲开始播放时,程序
做的一个小的MP3播放器,用using System.Windows.Forms.Timer这个来计时,获取当前歌曲播放的位置(播放时间),并显示到窗体上.当我运行程序,点击一首歌曲开始播放时, 程序就出现未响应。求解。
下面是一部分代码:

class DoMusic
{
    [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        public static extern int mciSendString(
            string lpstrCommand,
            string lpstrReturnString,
            int uReturnLength,
            int hwndCallback
            );
      [DllImport("Kernel32", CharSet = CharSet.Auto)]
        static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);

        /// 
        /// 获取当前播放的位置
        /// 

        /// 当前时间值(毫秒)
        public string GetCurrentTime()
        {
            string st="";
            mciSendString(@"status song position", st, 100, 0);
            return st;
        }

        public void Play(string path)
       {
             StringBuilder shortpath = new StringBuilder(80);
             int result = GetShortPathName(path, shortpath, shortpath.Capacity);
             path = shortpath.ToString();
             mciSendString(@"close all", null, 0, 0);
             mciSendString(@"open " + path + " alias song", null, 0, 0); //打开
             mciSendString(@"play song", null, 0, 0); //播放
        }
}
 public partial class MyMusic : Form
{
        public MyMusic()
        {
            InitializeComponent();
            //Control.CheckForIllegalCrossThreadCalls = false;
        }

      //播放
       private void btnPlay_Click(object sender, EventArgs e)
        {
            string path = @"F:\Music\123.mp3";
            DoMusic dm = new DoMusic();
            Play(path);
            progressTimer.Start();
        }

        //Timer事件
        private void progressTimer_Tick(object sender, EventArgs e)
        {
            DoMusic dm = new DoMusic();
            string currentTime = dm.GetCurrentTime();
            label1.text=currentTime;
        }
}

16 个解决方案

#1


自己先顶一下

#2


            string path = @"F:\Music\123.mp3";
            DoMusic dm = new DoMusic();
             dm.Play(path);            progressTimer.Start();


直接可以掉play()吗??

#3


不好意思,这是我贴的时候写错了,原来代码不是这样

#4


不好意思,我贴的时候写错了,源代码不是这样。
引用 2 楼 joop_song 的回复:
string path = @"F:\Music\123.mp3";
  DoMusic dm = new DoMusic();
  dm.Play(path); progressTimer.Start();


直接可以掉play()吗??

#5


该回复于2011-05-10 13:23:33被版主删除

#6


那源代码是??
引用 4 楼 niujingliang 的回复:
不好意思,我贴的时候写错了,源代码不是这样。引用 2 楼 joop_song 的回复:
string path = @"F:\Music\123.mp3";
DoMusic dm = new DoMusic();
dm.Play(path); progressTimer.Start();


直接可以掉play()吗??

#7


引用 6 楼 cjh200102 的回复:
那源代码是??

引用 4 楼 niujingliang 的回复:

不好意思,我贴的时候写错了,源代码不是这样。引用 2 楼 joop_song 的回复:
string path = @"F:\Music\123.mp3";
DoMusic dm = new DoMusic();
dm.Play(path); progressTimer.Start();


直接可以掉pla……

我贴的时候写错了,我程序里是dm.Play(path);

#8


 private void btnPlay_Click(object sender, EventArgs e)
        {
            string path = @"F:\Music\123.mp3";
            DoMusic dm = new DoMusic();
            Play(path);
            progressTimer.Start();
        }

在private void btnPlay_Click(object sender, EventArgs e)
这个地方放个断点进去看看,就可知道了啊

#9


该回复于2011-05-11 01:43:19被版主删除

#10


还是没有解决,自己再顶一下

#11


播放歌曲可能比较占资源,试一下将计时的方法另开条线程处理

#12


导出函数封装错误!
 [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        public static extern int mciSendString(
            string lpstrCommand,
            string lpstrReturnString,
            int uReturnLength,
            int hwndCallback
            );
[DllImport("Kernel32", CharSet = CharSet.Auto)]
        static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);

#13


CharSet = CharSet.Auto修改为CharSet.Ansi

#14


建议你也封装好 mciGetErrorString 函数,从此获得mci的错误信息

#15


引用 12 楼 zhu_jiang 的回复:
导出函数封装错误!
 [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
  public static extern int mciSendString(
  string lpstrCommand,
  string lpstrReturnString,
  int uRetur……
我试着改了一下还是不行

#16


有愿意帮忙留下邮箱地址,我发给他,给我看看

推荐阅读
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
author-avatar
浪子一品香_938
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有