【发布时间】:2022-01-17 05:04:08
【问题描述】:
这是我在这里的第一个问题。如果我在询问或格式化方面做错了什么,请告诉我!
我的程序必须在 Windows Media Player 控件中播放某些内容,等到播放完毕,然后继续播放另一个项目。
下面是整个函数:
public void Play(AxWindowsMediaPlayer player, ref bool audioFileFinished)
{
int numberOfIntro = rnd.Next(songIntros.Count); //Randomly select an intro from the list
string introFilePath = songIntros.ElementAt(numberOfIntro).fullPath;
player.URL = introFilePath;
//This task is necessary because the while (!audioFileFinished) will otherwise run in the UI and hang the app.
Task f = Task.Factory.StartNew(() =>
{
while (!audioFileFinished)
{
}
player.URL = fullPath;
});
}
当然,Visual Studio 抱怨我可能不会在 lambda 表达式中使用引用变量。这是合乎逻辑的,因为在异步任务中修改引用变量会很糟糕,让我们保持不变。
但是,我不需要修改它,因为它在程序的其他地方被修改了。这就是为什么它是一个引用变量。
有没有办法以 Visual Studio 接受的方式读取此变量?也许让它成为一个只读变量?如果有,怎么做?
提前致谢, 利亚姆
【问题讨论】:
-
您需要确保在 lambda 运行时,您正在读取的任何内容在任何时候都仍然存在。
ref可以引用局部变量,这就是它被禁止的原因。不要传递ref参数,而是将其放在某个字段中并使用它。也许你的 lambda 甚至可以是一个包含该字段的类的方法。