[問題] 網路上代碼問題請益
小弟是C#新手,有小段從網上找到的代碼,
不過不太清楚是幹嘛的,找了一堆關於委派及事件的資訊,
也沒看過這樣的寫法,想請板友指導,謝謝。
mediaPlayer.EndReached += (sender, e) => {
playFinished = true;
};
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.128.217
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1517479683.A.F41.html
推
02/01 20:21,
7年前
, 1F
02/01 20:21, 1F
→
02/01 20:25,
7年前
, 2F
02/01 20:25, 2F
推
02/01 20:37,
7年前
, 3F
02/01 20:37, 3F
推
02/02 00:18,
7年前
, 4F
02/02 00:18, 4F
→
02/02 00:18,
7年前
, 5F
02/02 00:18, 5F
→
02/02 00:21,
7年前
, 6F
02/02 00:21, 6F
→
02/02 00:22,
7年前
, 7F
02/02 00:22, 7F
謝謝大家的回覆,只知道這看起來像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
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章