为什么这个简单的移动表单在使用播放器时没有关闭

2023-12-11

我使用关闭按钮创建了这个简单的示例表单。

不使用 Interop.WMPLib.dll 时,一切都按预期工作

我见过其他应用程序使用它没有问题,但为什么当我添加以下行时表单进程没有关闭:

SoundPlayer myPlayer = new SoundPlayer();

当然还有处理它:

if (myPlayer != null)
            {
                myPlayer.Dispose();
                myPlayer = null;
            }

窗体关闭,但调试器 VS2008 仍处于活动状态。 Form 项目和 dll 仍然处于活动状态。

如果您给我发送电子邮件至[电子邮件受保护],我可以将压缩的项目发送给您。

下面是 dll 的类:

使用系统; 使用 System.Collections.Generic; 使用系统文本; 使用系统线程; 使用 System.Runtime.InteropServices; 使用 WMPLib;

命名空间 WindowsMo​​bile.Utilities { 公共委托 void SoundPlayerStateChanged(SoundPlayer 发送者, SoundPlayerState newState);

public enum SoundPlayerState
{
    Stopped,
    Playing,
    Paused,
}


public class SoundPlayer : IDisposable
{
    [DllImport("coredll")]
    public extern static int waveOutSetVolume(int hwo, uint dwVolume);

    [DllImport("coredll")]
    public extern static int waveOutGetVolume(int hwo, out uint dwVolume);

    WindowsMediaPlayer myPlayer = new WindowsMediaPlayer();

    public SoundPlayer()
    {
        myPlayer.uiMode = "invisible";
        myPlayer.settings.volume = 100;
    }

    string mySoundLocation = string.Empty;

    public string SoundLocation
    {
        get { return mySoundLocation; }
        set { mySoundLocation = value; }
    }

    public void Pause()
    {
        myPlayer.controls.pause();
    }

    public void PlayLooping()
    {
        Stop();
        myPlayer.URL = mySoundLocation;
        myPlayer.settings.setMode("loop", true);
    }

    public int Volume
    {
        get { return myPlayer.settings.volume; }
        set { myPlayer.settings.volume = value; }
    }

    public void Play()
    {
        Stop();
        myPlayer.URL = mySoundLocation;
        myPlayer.controls.play();
    }

    public void Stop()
    {
        myPlayer.controls.stop();
        myPlayer.close();
    }

    #region IDisposable Members

    public void Dispose()
    {
        try
        {
            Stop();
        }
        catch (Exception)
        {
        }
        // need this otherwise the process won't exit?!
        try
        {
            int ret = Marshal.FinalReleaseComObject(myPlayer);
        }
        catch (Exception)
        {
        }
        myPlayer = null;
        GC.Collect();
    }

    #endregion
}
}

MessageBox 或以下解决了它。谢谢。

public void Dispose()
    {
        try
        {
            Stop();
        }
        catch (Exception)
        {
        }
        // need this otherwise the process won't exit?!
        try
        {
            int ret = Marshal.FinalReleaseComObject(myPlayer);
        }
        catch (Exception)
        {
        }
        myPlayer = null;
        GC.Collect();

        //If you don't do this, it will not quit
        //http://www.eggheadcafe.com/software/aspnet/31363254/media-player-freezing-app.aspx
        for (int s = 0; s < 100; s++)
        {
            Application.DoEvents();
            Thread.Sleep(1);
        }
        GC.WaitForPendingFinalizers();

        //MessageBox.Show("Application Exiting");
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个简单的移动表单在使用播放器时没有关闭 的相关文章

  • 如何在 Caliburn.Micro 中使用 Conductor 的依赖注入

    我有时用Caliburn Micro http caliburnmicro com创建应用程序 使用最简单的 BootStrapper 我可以像这样使用 IoC 容器 SimpleContainer private SimpleContai
  • 线程独占数据:如何存储和访问?

    NET 中是否有可能将对象实例绑定到线程的当前执行上下文 这样在代码的任何部分我都可以做类似的事情CurrentThread MyObjectData DoOperation 并确保我访问特定于线程的数据 谢谢 你可以看一下线程静态属性 h
  • 如何创建语法突出显示文本框[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何使用 C Net 创建语法突出显示文本框 Take 闪烁网 http scintillanet codeplex com 并采取其
  • 命名管道客户端无法连接到作为网络服务运行的服务器

    我有一个服务在网络服务帐户下运行 该服务只是设置一个命名管道并侦听连接 NamedPipeServerStream listeningPipe new NamedPipeServerStream ourservicepipe PipeDir
  • 表达式访问者仅为某些 lambda 表达式调用 VisitParameter

    我希望能够使用嵌套扩展方法将 EF 中的实体投影到相应的视图模型 参见我之前的问题使用扩展方法在 EF 中投影单个实体 https stackoverflow com questions 39585427 projection of sin
  • 更改图像颜色与透明背景

    我需要使用 c System Drawings 将透明背景上带有绿色圆圈的图像加载到位图图像中 这是最简单的部分 但是 我需要在将其添加到更大的图像之前更改圆圈的颜色 而不影响周围的透明度 就我而言 我需要将圆圈颜色更改为黄色并将其添加为太
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 将视频上传/保存到数据库或文件系统

    我以前从未尝试过保存视频 所以我对此了解不多 我知道如果视频很小 我可以转换为字节数组并保存到数据库 但是为了提高效率 我想了解如何将任何上传的视频保存到我的服务器文件中 然后只保存该文件的文件路径我的数据库表中的视频 我完全不知道如何开始
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • Web浏览器控件:如何捕获文档事件?

    我正在使用 WPF 的 WebBrowser 控件加载一个简单的网页 在这个页面上我有一个锚点或一个按钮 我想在我的应用程序后面的代码中 即在 C 中 捕获该按钮的单击事件 WebBrowser 控件是否有办法捕获加载页面元素上的单击事件
  • 如何将 Boost Spirit 自动规则与 AST 结合使用?

    编辑 当我想在另一个规则上使用它时 我扩展了 sehe 的示例以显示问题 http liveworkspace org code 22lxL7 http liveworkspace org code 22lxL7 17 我正在尝试提高 Bo
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 如何使用 .NET 捕获我的桌面视频?

    我想知道是否有任何方法可以使用 NET 捕获我的桌面的视频 截屏视频 我并不是在寻找截屏软件 而只是在寻找一种可以让我自己生成桌面视频的技术 我想过拍摄多个屏幕截图 但我不确定如何以编程方式生成带有图像序列的视频 有人有主意吗 Thanks
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 为什么 INT64_MIN 的定义不同?为什么他们的行为不同?

    The stdint h我公司的标题是 define INT64 MIN 9223372036854775808LL 但在我项目的一些代码中 一位程序员写道 undef INT64 MIN define INT64 MIN 92233720

随机推荐

  • 带有 NSAttributedString 的 Cell 使 UITableView 的滚动变慢

    我有一个包含多种单元格的表视图 其中之一是带有 TextView 的单元格 在这个文本视图中 我必须渲染一个NSAttributedString从数据来看 这必须在主线程上完成 根据苹果文档 不应从后台线程调用 HTML 导入器 即选项字典
  • 使用 exec Laravel PHP 运行 .sh 文件

    我正在尝试运行一个 sh 文件 将 Excel 文件导入到我的数据库中 这两个文件位于公共文件夹内的同一目录中 由于某种原因 exec 命令没有被执行 或者没有发生任何错误 sh 文件冷 IFS while read column1 do
  • 在 Objective c 中公开/综合 iVar 属性

    我有一个类 它本质上充当另一个类的轻量级包装类 它将另一个类保存为 iVar 我希望能够公开 iVar 的某些属性 实际上相当多 但要做到这一点 我必须像这样写出每个属性访问器 void setProperty Class value iV
  • 特定的一个表头颜色 java swing

    I want to change the background color of particular table header In my appliaction I have to set header color Red on the
  • 如何显示 wget 的对话框量表?

    我想显示进度wget使用对话框 gauge 我找到了一个解决方案在这个网站上但它的显示率并未达到 100 90 后 对话框冻结 停止并且代码退出 有没有办法显示 wget 的对话框量表 URL http upload wikimedia o
  • 在 clickhouse 中将日期转换为 Jalal 日期

    我使用clickhouse版本22 3 15 33 在我的表中 日期的格式如下 2023 01 15 我想计算表中每个 Jalal 月份变量的总和 所以首先我需要将此日期转换为 Jalal 日期 然后获取月份 然后使用group by基于月
  • 将图像和文本共享到 Facebook Messenger,但 UIActivityViewController 失败

    Question 必须对以下代码进行哪些更改才能确保 Messenger 正常运行 很好地与UIActivityViewController并分享图像和 文本 或者至少是图像 背景 我在用UIActivityViewController分享
  • 在哪里可以找到“SDL_Window”的定义

    我刚刚开始在 Linux 中学习 SDL2 我正在阅读 LazyFoo 的第一个教程 我看到有该代码 The window we ll be rendering to SDL Window window NULL 在哪里可以找到的定义SDL
  • 具有返回 char* 函数的内存管理

    今天 我没有多想 就根据给定枚举值的 switch 语句编写了一个返回 char 的简单函数 然而 这让我想知道如何释放那段记忆 我所做的是这样的 char func char retval new char 20 Switch blah
  • 如何在同一个图表上合并一条线和散点图?

    使用 Rplotly 包创建时 从 data frame 创建的两个单独的图表可以正常工作 然而 我不知道如何将它们组合成一个 大概是使用 add trace 函数 df lt data frame season c 2000 2000 2
  • 如何访问框架内的页面内容?

    我在主窗口内有一个框架 里面有一个带有面板和各种内容的页面 主窗口决定加载哪个页面 然后必须与其内容交互 这就是问题所在 我已经尝试了很多解决方案 最好的是这个 但返回 pageLogin 作为空对象 mainFrame Source ne
  • 在源代码树而不是包中运行所有测试

    我的单元测试与集成测试位于单独的目录树中 但具有相同的包结构 我的集成测试需要可用的外部资源 例如服务器 但我的单元测试完全独立于彼此和环境 在 IntelliJ IDEA v7 中 我定义了一个 JUnit 运行 调试配置来运行顶级包中的
  • 理解这个removeAll java方法和arrayList

    此方法的职责是删除所有出现的值toRemove来自数组列表 剩余的元素应该只是向列表的开头移动 大小不会改变 末尾的所有 额外 元素 但是多次出现toRemove位于列表中 应该只用 0 填充 该方法没有返回值 如果列表没有元素 那么它应该
  • 考虑到记录的大小,在网格视图中实现分页的最佳程序是什么?

    我在 sq server db 中有一个表有超过 100 万行 我需要在 gridview 中显示这些数据 并在 asp net 页面中分页 由于记录量较大 我需要提高页面显示数据的性能 实现分页 我应该遵循什么程序来实现分页 请帮忙 有多
  • Python - getattr 和串联

    因此 在我的代码中使用 getattr 时 我发现了以下内容 myVariable foo A bar 有效 但是是这样的 B A myVariable getattr foo B bar 返回错误 指出 foo 不包含属性 A bar 我
  • 如何在 pygtk 中更改 gtk.TreeView 的交替背景行颜色?

    我正在尝试更改树视图的交替背景颜色 我知道这通常应该由主题决定 但我想重写以测试 gtk 样式功能 根据树形视图文档here 我了解到 TreeView 有几个只读的样式选项 包括 偶数行颜色 奇数行颜色 和 允许规则 根据文档 允许绘制偶
  • php: file_get_contents() 可与 CLI 配合使用,但在服务器上调用时不起作用(在页面中)

    我有点困惑 我正在使用 bit ly PHP API 来缩短一些网址 这在本地主机上运行良好 但是当我在我的服务器上尝试它时 在 Apache 中运行的 php file get contents 返回一个空字符串 我检查了 apache
  • 列插入或更新与先前的 CREATE RULE 语句强加的规则冲突

    我正在开发一款在线游戏 我在向表插入新数据时遇到一些问题 我越来越 2010 4 8 2 14 37000 513 微软 ODBC SQL Server 驱动程序 SQL Server 列插入或 更新与强加的规则冲突 通过先前的 CREAT
  • 带图像的角度选择

    情况 我需要在语言选择中插入标志 我在 Google 和 StackOverflow 中进行了搜索 但找到的解决方案对我不起作用 代码 在控制器中 scope language list name english url https raw
  • 为什么这个简单的移动表单在使用播放器时没有关闭

    我使用关闭按钮创建了这个简单的示例表单 不使用 Interop WMPLib dll 时 一切都按预期工作 我见过其他应用程序使用它没有问题 但为什么当我添加以下行时表单进程没有关闭 SoundPlayer myPlayer new Sou