推 vi000246: 你都知道是委派跟事件了 為什麼會看不懂? 02/01 20:21
→ testPtt: 就跟可視元件事件點兩下填入playFinished = true;一樣 02/01 20:25
推 gn1943141: lambda 02/01 20:37
推 lightyen: 訂閱事件的一種簡便寫法 如果不需要取消訂閱的話就能這 02/02 00:18
→ lightyen: 樣寫 02/02 00:18
→ lightyen: 缺點是sender,e在同一個域只能有一個 02/02 00:21
→ lightyen: 可以另改名稱: (a, b) => {...} 02/02 00:22
謝謝大家的回覆,只知道這看起來像callback function,但是沒這樣寫過。
不好意思,有個部份想再請教一下…
其實代碼主要是參考Vlc.Net,如下:
--我是分隔線--
using System;
using System.IO;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string libDirectory;
if (IntPtr.Size == 4)
{
// Use 32 bits library
libDirectory = Path.Combine(Environment.CurrentDirectory,
"libvlc_x86");
}
else
{
// Use 64 bits library
libDirectory = Path.Combine(Environment.CurrentDirectory,
"libvlc_x64");
}
var options = new string[]
{
// VLC options can be given here. Please refer to the VLC
command line documentation.
};
var mediaPlayer = new Vlc.DotNet.Core.VlcMediaPlayer(new
DirectoryInfo(libDirectory));
var mediaOptions = new string[]
{
":sout=#file{dst="+Path.Combine(Environment.CurrentDirectory,
"output.mov")+"}",
":sout-keep"
};
mediaPlayer.SetMedia(new
Uri("http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov"),
mediaOptions);
bool playFinished = false;
mediaPlayer.PositionChanged += (sender, e) =>
{
Console.Write("\r" + Math.Floor(e.NewPosition * 100) + "%");
};
mediaPlayer.EncounteredError += (sender, e) =>
{
Console.Error.Write("An error occurred");
playFinished = true;
};
mediaPlayer.EndReached += (sender, e) => {
playFinished = true;
};
mediaPlayer.Play();
// Ugly, sorry, that's just an example...
while(!playFinished)
{
Thread.Sleep(TimeSpan.FromMilliseconds(500));
}
}
}
}
--我是分隔線--
問題1.
mediaPlayer.PositionChanged += (sender, e) =>
這個部份是先告知事件觸發的話,就來執行事件委派的內容,
只是函式內容直接寫在裡面了?
問題2.
如上將Main的內容改為副程式,可能此副程式同時會被呼叫多次,
接收參數為一個識別字串,並建立Dictionary容器,
key為識別字串,而value為mediaPlayer的實例,
請問這樣會有問題嗎? 因為副程式內的區域變數playFinished,
在副程式結束後就應該要消失了,不過不明白的是…
實際這麼做了後,程式能正常運行,主要是這點覺得奇怪。
以上兩個重要觀念問題再麻煩大家協助回覆哦,謝謝你們:)
※ 編輯: james999 (220.132.128.217), 02/05/2018 16:40:29