我是 C# 執行緒的新手。我想要做的是從 API 獲取一些螢屏事件。現在我想在我的主螢屏和輔助螢屏上一起運行這些事件。這是代碼片段。
private void btn_play_Click(object sender, EventArgs e)
{
var path = "C:\\ActiveProjects\\ScreenPlayerClient\\ScreenPlayerClient\\"
"ScreenPlayerClient\\bin\\Debug\\netcoreapp3.1\\Json\\eventsfile.json";
var events = JsonConvert.DeserializeObject<GetEventsResponseModel>(
File.ReadAllText(path));
var screens = Screen.AllScreens;
foreach (var scr in events.Screens)
{
foreach (var computerscreen in screens)
{
if (scr.Title == computerscreen.DeviceName)
{
Thread thr = new Thread(
new ThreadStart(playContent(scr, computerscreen)));
}
}
}
}
private void playContent(ScreenResponseModel scr, Screen screen)
{
var fileDetails = apiOperation.DownLoadFile(
scr.Events.FirstOrDefault().VideoLink).Result;
var filepath = SaveVideo(fileDetails);
PlayerForm player = new PlayerForm();
player.videolink = filepath;
player.Location = screen.WorkingArea.Location;
player.StartPosition = FormStartPosition.Manual;
player.screen = screen;
player.ShowDialog();
}
我收到錯誤“方法名稱應為”在
Thread thr = new Thread(new ThreadStart(playContent(scr,computerscreen)));
uj5u.com熱心網友回復:
Thread thr = new Thread(() => playContent(src,computerscreen));
thr.Start();
uj5u.com熱心網友回復:
播放內容(scr,電腦螢屏)
這呼叫了一個函式。new Thread需要 ThreadStart 委托,或者可以轉換為委托的東西,即 lambda 或方法名稱。
嘗試將其更改為
new Thread(() => playContent(scr,computerscreen));
但是,我會主張使用任務而不是原始執行緒。幾乎從來沒有一個很好的理由來創造一個Thread你自己。IE
Task.Run(() => playContent(scr,computerscreen));
但是,看起來playContent正在做一些與 UI 相關的事情,這根本行不通。或者它可能會創建多個 UI 執行緒,這很少是一個好主意。UI 類只能從關聯的 UI 執行緒訪問。所以我會首先重新考慮使用執行緒的整個計劃。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327001.html
上一篇:在R中圍繞坐標繪制多邊形
下一篇:在串列上同步
