c# - 创建线程时出现编译时错误
问题描述
我是 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)));
解决方案
播放内容(scr,电脑屏幕)
这调用了一个函数。new Thread
需要一个 ThreadStart 委托,或者可以转换为委托的东西,即 lambda 或方法名称。
尝试将其更改为
新线程(() => playContent(scr,computerscreen));
但是,我会主张使用任务而不是原始线程。几乎没有一个很好的理由来创造一个Thread
你自己。IE
Task.Run(() => playContent(scr,computerscreen));
但是,它看起来像是playContent
在做一些与 UI 相关的事情,这根本行不通。或者它可能会创建多个 UI 线程,这不是一个好主意。UI 类只能从关联的 UI 线程访问。所以我会首先重新考虑使用线程的整个计划。
推荐阅读
- java - 我无法更改 thingsboard 应用程序的徽标
- powershell - Pester 测试更高级的 powershell 脚本
- asp.net-core - ASP.NET Core:如何在 Visual Studio Code 和 CLI 中使用现有的 SQL Server db?
- excel - 保存工作簿
- html - Bootstrap 行在屏幕调整大小时垂直移动
- wordpress - 提交的网址存在已删除页面的抓取问题
- linux-kernel - 在 python Notebook 中运行某些行时,内核不断死亡并重新启动
- python - 计算 id 出现的次数并将其分配给列
- python - 如何在 django 模板中反向查找 m2m 字段
- laravel - [laravel][npm] 我不能使用 swiper 错误 Uncaught TypeError: Swiper is not a constructor