创建线程时出现编译时错误



我是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)));

playContent(scr,computerscreen)

this调用函数。new Thread期望一个ThreadStart委托,或者一些可以转换为委托的东西,即lambda或方法名。

试试改成

new Thread(() =>computerscreen playContent (scr));

然而,我主张使用任务而不是原始线程。几乎没有一个好的理由让你自己创建一个Thread。例如

Task.Run(() =比;computerscreen playContent (scr));

然而,看起来playContent正在做一些与UI相关的事情,这将根本不起作用。或者它可能会创建多个UI线程,这很少是一个好主意。UI类只能从关联的UI线程访问。因此,我首先要重新考虑使用线程的整个计划。

Thread thr = new Thread(() => playContent(src,computerscreen));
thr.Start();

最新更新