背景:
我有一个包含多个操作的类,这些操作需要几秒钟才能完成。与此同时,我想更新 UI。所以通常 BackgroundWorker 是要走的路。但由于某种原因,BackGroundWorker 并不总是按我想要的方式工作(例如:当我尝试使用带有事件的 WebBrowser 并调用 ReportProgress 事件时,BackGroundWorker 似乎崩溃了)。
所以我通过将 Ui 与主线程分开来避免所有这些。
这个伪代码更好地解释了它:
public Ui ui;
main
{
Thread threadUi = new Thread(initiateUi);
//Initiate and start Thread
//Everything I will do from here on will not have any consequences
//on my ui.
//
//Object Ui can still be publicly accessed, making it possible to
//update the user interface.
}
现在,当我有一个 Bar 类的实例时,我会让 UI 可以像这样访问它:
public Bar bar1;
public Bar bar2;
main
{
//
//other stuff here
//
Thread threadBar1 = //New Thread where I call the Bar initializer function
//and pass bar1 as parameter.
Thread threadBar2 = //idem dito, except with bar2 as parameter
//
//other stuff here
//
}
通过这种设计,我可以使用以下函数从我的用户界面调用 bar1 和 bar2:
Program.bar1.someFunction();
问题:
现在假设我有一个名为 FooHandler 的类。此类具有在某个 FooDepository 中搜索 Foo 的所有实例的函数以及用于操作 Foo 对象的其他函数。这是一个静态类,因为在我的例子中,它不需要有多个实例。
但是如果我要从 FooHandler 调用一个函数,该函数会在我的 UI 线程中运行,因为那是调用线程(我不太确定,但我找不到任何关于这个主题的文档)。因此,我很有可能即将面临我开始时遇到的问题。
问题:
是否可以在不使用调用线程的处理能力的情况下访问静态类的函数?