如何在 C# 中使用 ListBox 更改焦点 [重复]

Posted

技术标签:

【中文标题】如何在 C# 中使用 ListBox 更改焦点 [重复]【英文标题】:How to change the focus with ListBox in c# [duplicate] 【发布时间】:2020-12-12 22:34:02 【问题描述】:

我是 C# 的初学者,所以我可能不太明白为什么会出现此错误。

System.InvalidOperationException:跨线程操作无效: 控制从线程以外的线程访问的“lstb_files_r” 创建于。

这就是我正在做的:

我删除了 X csv。 我读了第一个 (lstb_files_r.SelectedIndex = i;) 完成后我想阅读第二部(i++)。但是我有这个错误...

谁能解释一下我该如何解决这个问题?

【问题讨论】:

提示:搜索英文错误消息,可能已经有关于每个错误的问题和答案。如果您想对您的案例有更多具体的帮助,那么您必须包括来源,用文字解释是没有帮助的,因为您做错了。见minimal reproducible example。 Wpf、WinForms 还是其他? 【参考方案1】:

当我提出问题时,我继续查看所有链接并找到了一些东西(也许这不是最好的方法,但我会找到其他解决方案)

我使用委托

lstb_files_r.Invoke((MethodInvoker)delegate

我把所有的代码都放进去就可以了。

【讨论】:

【参考方案2】:

您正在执行跨线程操作,这意味着您在一个线程中(这是您的算法)并且想要在另一个线程中执行某些事情(这里 GUI 是另一个线程),这是不允许的。为此,您必须调用 GUI 线程并执行该功能。在C#中最简单的方法是使用backgraoudworkerbackgroudworker的使用可以看here如何使用后台worker。

在后台工作程序中使用progres-s-report 来执行GUI 操作。如果您需要进一步的帮助,我可以帮助您。

【讨论】:

BackroundWorker(现在已经过时)安息吧; Taskasyncawait是我们应该坚持的 @DmitryBychenko 他们仍然在 dot 5.0 版本 docs.microsoft.com/en-us/dotnet/api/… 如果他们已经过时,那么他们不应该在最新的 dotnet 版本包中。其次,我说它易于使用。他是新人,想学习

以上是关于如何在 C# 中使用 ListBox 更改焦点 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在c#中删除listBoxItem时ListBox不刷新

更改焦点上的 asp lixt 框的颜色

您如何以编程方式将焦点设置到已具有焦点的 WPF ListBox 中的 SelectedItem?

WPF如何更改xaml代码里ListBox的数据绑定

如何在 c# 中使用 user32.dll 从类“ThunderRT6ListBox”的窗口中检索值

在 ItemsControl 中 UpdateSourceTrigger 设置为 PropertyChanged 的​​ ListBox 在键入时失去焦点