【问题标题】:How to change the focus with ListBox in c# [duplicate]如何在 C# 中使用 ListBox 更改焦点 [重复]
【发布时间】: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 还是其他?

标签: c# multithreading winforms listbox


【解决方案1】:

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

我使用委托

lstb_files_r.Invoke((MethodInvoker)delegate

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 让BackroundWorker(现在已经过时)安息吧; Task、async、await是我们应该坚持的
    • @DmitryBychenko 他们仍然在 dot 5.0 版本 docs.microsoft.com/en-us/dotnet/api/… 如果他们已经过时,那么他们不应该在最新的 dotnet 版本包中。其次,我说它易于使用。他是新人,想学习
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多