在特定时间启动和停止 MediaElement

2024-01-29

我正在将应用程序更改为 WPF,它根据定时事件播放音频、视频和图片。我使用了 "string MciCommand = string.Format("播放帧从 {0} 到 {1} {2}"" ,前。

我现在一直在 WPF c# 中搜索并尝试解决这个问题

  1. 我有一个视频 (wmv),并且有多个部分需要一起播放。 示例 .. 第 1 节开始(200 毫秒)停止(250 毫秒)第 2 节开始(5000 毫秒)停止(15000 毫秒)
  2. 最后我需要它暂停在静止的帧上..

我尝试过使用计时器和空的 while 循环,但它无法正确查找。 我很困惑媒体元素似乎不支持这种类型的使用。我想到了 wpfmediakit 和 direct show 很难掌握我的 wpf 新手技能。

任何帮助将不胜感激...


这就是我最终解决问题的方式。我使用了一个属性列表,并将其用作循环的脚本。如果仓位大于结束时间。它触发计时器并转到列表中的下一个项目..仍然有一些事情可以做得更精致..比如textbox4更改事件也会触发next_item但它完成了工作..现在.. 希望这可以帮助遇到同样问题的人......

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Windows.Media.Animation;
    using System.ComponentModel;
    using System.Threading;
    namespace WpfApplication6
    {
        public partial class MainWindow : Window
        {
            BackgroundWorker position = new BackgroundWorker();
            BackgroundWorker test_position = new BackgroundWorker();
            public List<video_script> script_list = new List<video_script>();
            int scrip_index;
    public class video_script
        {
        public string action { get; set; }
        public TimeSpan start_time { get; set; }
        public TimeSpan endtime { get; set; }
        public string filename { get; set; }

    }
    private void position_DoWork(object sender, DoWorkEventArgs e)
    {
        Thread.Sleep(100);
    }
    private void position_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
      if (mediaElement1.Position > TimeSpan.FromMilliseconds(Convert.ToInt32(tb_endtime.Text)))
        {
            next_item();
        }
        else position.RunWorkerAsync();
        textBox4.Text = "Play";
        textBox3.Text = mediaElement1.Position.ToString();
    }
    public MainWindow()
    {
        InitializeComponent();
        position.DoWork += new DoWorkEventHandler(position_DoWork);
        position.RunWorkerCompleted += new RunWorkerCompletedEventHandler(position_RunWorkerCompleted);
        position.WorkerSupportsCancellation = true;
        test_position.DoWork += new DoWorkEventHandler(test_position_DoWork);
        test_position.RunWorkerCompleted += new RunWorkerCompletedEventHandler(test_position_RunWorkerCompleted);
        test_position.WorkerSupportsCancellation = true;
    }

    private void Mediasource_Click(object sender, RoutedEventArgs e)
    {
        if (!position.IsBusy) position.RunWorkerAsync();
        mediaElement1.Source = new Uri(tb_filename.Text);
        mediaElement1.LoadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.UnloadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.ScrubbingEnabled = true;
        mediaElement1.Play();
    }
    private void stopbutton_Click(object sender, RoutedEventArgs e)
    {
        mediaElement1.Stop();
    }

    private void Playbutton_Click(object sender, RoutedEventArgs e)
    {
        scrip_index = 0;
        mediaElement1.Play();
        mediaElement1.LoadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.UnloadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.ScrubbingEnabled = true;
    }







    private void pausebutton_Click(object sender, RoutedEventArgs e)
    {
        if (mediaElement1.CanPause)
        {
            mediaElement1.Pause();
        }
    }


    private void AddToListbutton_Click(object sender, RoutedEventArgs e)
    {
        video_script temp_item = new video_script();
        temp_item.filename = tb_filename.Text;
        temp_item.start_time = TimeSpan.FromMilliseconds(Convert.ToInt32(tb_starttime.Text));
        temp_item.endtime = TimeSpan.FromMilliseconds(Convert.ToInt32(tb_endtime.Text));
        temp_item.action = tb_action.Text;

        script_list.Add(temp_item);

        listBox1.Items.Add(temp_item.filename + " | " + tb_starttime.Text + " | " + tb_endtime.Text + " | " + tb_action.Text);
    }





    private void positionbox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (script_list.Count != 0)
        {
            if (script_list[scrip_index].endtime < mediaElement1.Position) next_item();
        }
    }



    #region test button area
    private void next_item()
    {
        if (scrip_index < script_list.Count() - 1)
        {
            scrip_index++; 




            switch (script_list[scrip_index].action)
            {
                case "Load":

              mediaElement1.LoadedBehavior = System.Windows.Controls.MediaState.Manual;
              mediaElement1.UnloadedBehavior = System.Windows.Controls.MediaState.Manual;
              if (mediaElement1.Source != new Uri(script_list[scrip_index].filename)) mediaElement1.Source = new Uri(script_list[scrip_index].filename);
              mediaElement1.ScrubbingEnabled = true;
              playing = false;
                    next_item();
                    break;

                case "Play":
                    mediaElement1.Play();
                    playing = true;
                    if(!test_position.IsBusy) test_position.RunWorkerAsync();

                    break;
                case "Pause":
                    mediaElement1.Pause();
                    playing = false;
                    break;
                case "Seek":
                    mediaElement1.Position = script_list[scrip_index].start_time;
                    playing = true;
                    break;
                case "Stop":
                    mediaElement1.Stop();
                    playing = false;
                    break;
            }

        }
    }


    private void test_position_DoWork(object sender, DoWorkEventArgs e)
    {
        Thread.Sleep(100);
    }
    private void test_position_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {



        if (mediaElement1.Position > script_list[scrip_index].endtime )
        {
            next_item();
        }
        else test_position.RunWorkerAsync();

        textBox4.Text = "Play";
        textBox3.Text = mediaElement1.Position.ToString();
        if (playing && !test_position.IsBusy) test_position.RunWorkerAsync();

    }
    private void testbutton_Click(object sender, RoutedEventArgs e)
    {
        if (mediaElement1.Source != new Uri(tb_filename.Text)) mediaElement1.Source = new Uri(tb_filename.Text);
                    mediaElement1.LoadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.UnloadedBehavior = System.Windows.Controls.MediaState.Manual;
        mediaElement1.Play();

        mediaElement1.ScrubbingEnabled = true;
        mediaElement1.Position = TimeSpan.FromMilliseconds(Convert.ToInt32(tb_starttime.Text));
        if (test_position.IsBusy) test_position.CancelAsync();

        if (!test_position.IsBusy) test_position.RunWorkerAsync();
    }
    bool playing;
    #endregion
    #region slider region

    private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        if (slider1.Value > slider2.Value) slider2.Value = slider1.Value - 1;
    }
    private void slidermax_values_TextChanged(object sender, TextChangedEventArgs e)
    {
        slider1.Maximum = Convert.ToInt32(tb_slider_maxvalue.Text);
        slider2.Maximum = Convert.ToInt32(tb_slider_maxvalue.Text);
    }
    private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        if (slider2.Value < slider1.Value) slider1.Value = slider2.Value - 1;
    }
    #endregion

    private void start_script_Click(object sender, RoutedEventArgs e)
    {
        scrip_index = -1;
        next_item(); 
    }

    private void mediaElement1_MediaOpened(object sender, RoutedEventArgs e)
    {

    }



   }
}

这是我用于测试的表单的 Xaml...

    <Window x:Class="WpfApplication6.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="402" Width="922"   WindowStyle="ThreeDBorderWindow">
    <Grid>
    <Button Content="mediasource load" Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="Mediasource_Click" />
    <Button Content="play" Height="23" HorizontalAlignment="Left" Margin="10,43,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="Playbutton_Click" />
    <Button Content="stop" Height="23" HorizontalAlignment="Left" Margin="10,142,0,0" Name="button5" VerticalAlignment="Top" Width="75" Click="stopbutton_Click" />
    <Button Content="Pause" Height="23" HorizontalAlignment="Left" Margin="12,171,0,0" Name="button6" VerticalAlignment="Top" Width="75" Click="pausebutton_Click" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="165,296,0,0" Name="tb_starttime" VerticalAlignment="Top" Width="120"   Text="{Binding ElementName=slider1, Path=Value, Mode=TwoWay}" />
    <TextBox Height="23" HorizontalAlignment="Right" Margin="0,296,426,0" Name="tb_endtime" VerticalAlignment="Top" Width="120" Text="{Binding ElementName=slider2, Path=Value, Mode=TwoWay}" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="630,281,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" TextChanged="positionbox_TextChanged" IsReadOnly="False" Text="{Binding ElementName=mediaElement1, Path=Position.Milliseconds, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="490,281,0,0" Name="textBox4" VerticalAlignment="Top" Width="134" />
    <Label Content="filename" Height="28" HorizontalAlignment="Left" Margin="104,325,0,0" Name="label1" VerticalAlignment="Top" />
    <ListBox Height="215" HorizontalAlignment="Left" Margin="469,10,0,0" Name="listBox1" VerticalAlignment="Top" Width="431" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="165,325,0,0" Name="tb_filename" VerticalAlignment="Top" Width="213" Text="C:\Data\001femod1\vid\dat1.avi" AcceptsTab="False" />
    <Label Content="end time" Height="28" HorizontalAlignment="Left" Margin="291,294,0,0" Name="label2" VerticalAlignment="Top" />
    <Label Content="start time" Height="28" HorizontalAlignment="Left" Margin="104,296,0,0" Name="label3" VerticalAlignment="Top" />
    <Button Content="add to list" Height="23" HorizontalAlignment="Left" Margin="11,315,0,0" Name="button7" VerticalAlignment="Top" Width="75" Click="AddToListbutton_Click" />
    <Label Content="Action" Height="28" HorizontalAlignment="Left" Margin="384,325,0,0" Name="label4" VerticalAlignment="Top" />
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="434,326,0,0" Name="tb_action" VerticalAlignment="Top" Width="120">
        <ComboBoxItem Content="Play" />
        <ComboBoxItem Content="Load" />
        <ComboBoxItem Content="Stop" />
        <ComboBoxItem Content="Pause" />
        <ComboBoxItem Content="Seek" />
    </ComboBox>
    <Button Content="test times" Height="23" HorizontalAlignment="Left" Margin="50,246,0,0" Name="tb_test" VerticalAlignment="Top" Width="75" Click="testbutton_Click" />
    <Slider Height="23" Margin="147,231,170,0" Name="slider1" VerticalAlignment="Top" SmallChange="1" LargeChange="10" IsSelectionRangeEnabled="False" IsMoveToPointEnabled="True" IsSnapToTickEnabled="True" ValueChanged="slider1_ValueChanged" />
    <Slider Height="23" HorizontalAlignment="Left" Margin="147,260,0,0" Name="slider2" VerticalAlignment="Top" Width="583" SmallChange="1" IsSnapToTickEnabled="True" ValueChanged="slider2_ValueChanged" />
    <Label Content="max value" Height="28" HorizontalAlignment="Left" Margin="736,226,0,0" Name="label5" VerticalAlignment="Top" />
    <TextBox Height="23" HorizontalAlignment="Left" Margin="736,247,0,0" Name="tb_slider_maxvalue" VerticalAlignment="Top" Width="120" Text="74000" TextChanged="slidermax_values_TextChanged" />
    <Button Content="start script" Height="23" HorizontalAlignment="Left" Margin="10,281,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="start_script_Click" />
    <MediaElement Height="215" HorizontalAlignment="Left" Margin="91,10,0,0" Name="mediaElement1" VerticalAlignment="Top" Width="372" MediaOpened="mediaElement1_MediaOpened" />
    </Grid>
    </Window>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在特定时间启动和停止 MediaElement 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内

随机推荐

  • 将纬度和经度转换为公里

    我正在构建应用程序 我可以在其中获取用户的latitude and longitude使用下面的代码 p Click the button to get your coordinates p
  • 在 Javascript/jQuery 中克隆事件对象[重复]

    这个问题在这里已经有答案了 如何创建一个完全独立的新事件对象 其中包含与给定事件对象完全相同的所有属性e 到目前为止 我已经尝试过以下方法 但没有运气 function myHandler e e e originalEvent metho
  • React+Flux:通知视图/组件操作失败?

    我正在编写一个注册表组件 当表单提交时 它会触发创建用户操作 createUser 操作通过 ajax api 调用创建一个新用户 如果用户已存在 则触发的用户操作将失败 我们知道我们无法从 ajax 调用返回响应 我们需要一个回调 我如何
  • 使用 Flexbox 填充剩余空间

    我希望中间行像其他网站一样填满整个浏览器 所以即使内容很少 我也希望中间的行填满整个空间 这是CSS import compass css3 wrapper display webkit box display moz box displa
  • 如何在 Tkinter 中将小部件放置在 Canvas 小部件中?

    我基本上希望能够使用Canvas作为其他小部件的元容器 我想将我的 GUI 分为左侧 中间和中间部分 在每个部分中我希望能够place小部件如 Checkbutton Button Label etc 如何将小部件放置在 Canvas 小部
  • 什么是大 O 表示法? [复制]

    这个问题在这里已经有答案了 可能的重复 大O的简单英语解释 https stackoverflow com questions 487258 plain english explanation of big o 我知道 Big O 表示法用
  • Nancy 未能在自定义约定中找到静态内容

    我已经设置了一个 Nancy 引导程序来从非默认目录路径 它是自托管的 Nancy 提供静态内容 奇怪的是 以下内容适用于自定义视图位置约定 但不适用于 js 或 css 静态内容约定 是的 文件和文件夹都存在于这些位置 我尝试解决此问题的
  • 使用 SBT 进行多版本构建

    我想在 SBT 中实现以下构建 拥有多个 scala 版本 具有多个目标版本 由于库依赖性 让我们以一个外部库为例 它存在于版本1 0 2 0 3 0和Scala 2 92 2 10 2中 我想编译 汇编和发布 MyProject exte
  • DerivedData 中缺少 TestSummeries.plist 文件

    我正在使用 xcode 11 beta 在 iOS 13 0 设备上运行单元测试 测试执行后 它应该在里面生成一个 testummeries plist 文件 Users YourUsername Library Developer Xco
  • 使用 NSURLConnection 进行 POST - 无 JSON

    我正在尝试用 Objective C 编写一个 iPhone 应用程序 我需要使用 NSURLConnection 发布数据 我能找到的每个例子都涉及 JSON 我不需要使用 JSON 我需要做的就是 POST 数据并从 PHP 脚本获取简
  • Java 编译速度 vs Scala 编译速度

    我已经用 Scala 编程有一段时间了 我喜欢它 但令我恼火的一件事是编译程序所需的时间 这似乎是一件小事 但使用 Java 我可以对我的程序进行一些小更改 单击 netbeans 中的运行按钮 然后 BOOM 它正在运行 随着时间的推移
  • 什么是运行时环境?

    有人可以用简单的术语解释一下这意味着什么吗 是指应用程序代码运行的环境 DOS Windows Linux 等 吗 将其与开发环境和构建环境区分开来 您往往会在这里找到层次结构 运行时环境 执行程序所需的一切 但没有工具可以更改它 构建环境
  • 如何P/Invoke“__arglist”函数?

    背景 我用 C 编写了以下函数 extern C declspec dllexport int test const char 我使用 P Invoke 从 C 调用它 DllImport foo bar dll EntryPoint te
  • 使用 GPU PyOpenCL 优化 python 代码的不同方法:内核 GPU/PyOpenCL 内的 extern 函数

    我使用以下命令来分析我的 Python 代码 python2 7 m cProfile o X2 non flat multiprocessing dummy prof X2 non flat py 然后 我可以全局可视化不同贪婪函数的重新
  • 基类中的 Autofac 属性注入

    我正在开发 Windows Phone 8 1 应用程序 并且有一个具有公共属性的基类 public class ViewModelBase public ISomeClass MyProp get set 我的派生类看起来像这样 publ
  • 使用哪种 Micro ORM? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ViewPager与当前Fragment的通信

    我正在使用 ViewPager http developer android com reference android support v4 view ViewPager html http developer android com r
  • 在 WPF xaml 文件中引用另一个项目中的名称空间

    我引用另一个项目的命名空间 类库 所有模型都驻留在其中 正如相关问题中提到的 他们通过将程序集添加到 xaml 文件中解决了问题 但这对我不起作用 这就是我发帖的原因 我有 2 个项目 WPF 项目本身 类库 包含所有视图模型 WPF项目有
  • 使用pysftp下载文件

    我正在尝试加载 并直接保存在本地 csv文件存储在 FTP 服务器 SFTP 协议 上 我将 Python 与 pysftp 库结合使用 当我检查文件是否存在时 它返回 TRUE 但是当尝试加载文件时 无论我尝试什么 它似乎都是空的 如何将
  • 在特定时间启动和停止 MediaElement

    我正在将应用程序更改为 WPF 它根据定时事件播放音频 视频和图片 我使用了 string MciCommand string Format 播放帧从 0 到 1 2 前 我现在一直在 WPF c 中搜索并尝试解决这个问题 我有一个视频 w