热门标签 | 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


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

推荐阅读
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 深入解析C#中app.config文件的配置与修改方法
    在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
  • 本文探讨了如何在C#应用程序中通过选择ComboBox项从MySQL数据库中检索数据值。具体介绍了在事件处理方法 `comboBox2_SelectedIndexChanged` 中可能出现的常见错误,并提供了详细的解决方案和优化建议,以确保数据能够正确且高效地从数据库中读取并显示在界面上。此外,还讨论了连接字符串的配置、SQL查询语句的编写以及异常处理的最佳实践,帮助开发者避免常见的陷阱并提高代码的健壮性。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
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社区 版权所有