我找到了一个看起来非常简单的解决方案来解决我目前的情况。
我目前的情况是我想在一个新线程上执行一些 I/O 繁重的操作,这样我就不会陷入我的 GUI 线程。作为我的表单的成员,我编写了一个函数,它已经完成了这些 I/O 操作,但是在 GUI 线程上运行它确实让应用程序使用起来很痛苦。所以我的计划是在一个新的线程中运行这个函数。因此,我在表单中创建了一个 Thread 变量,并试图让它将该函数用作 ThreadStart 参数。不过,它似乎并不喜欢它。
我在这里找到了一个外观优雅的解决方案,作为对另一个线程的回应。
///...blah blah updating files
string newText = "abc"; // running on worker thread
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText; // runs on UI thread
});
///...blah blah more updating files
从该响应的外观来看,我可以在新线程中运行此函数,然后在线程完成计算后使用匿名函数更新我的表单。不过,我只是不够好,无法填补该回复中的空白。
我似乎读到的关于 Threads 的所有内容都表明我的 ThreadStart 函数需要是新类中的静态方法。该响应似乎表明我可以在我的 Form 类中执行此操作,以便this
引用仍然引用我的 Form 实例。否则,如果我的 ThreadStart 参数是一个不同的类,我必须传入对 Form 实例的引用,这似乎需要更多代码,对吧?
有人介意帮我填写该回复的上下文吗?提前致谢!