我有一个控件,它必须在 UI 线程上做很多工作。它会导致 UI 的其他部分出现延迟。目前,将其拆分并在工作线程上工作并不容易,因为大多数操作都发生在依赖属性上,并且他们不喜欢跨线程。
但是我想知道是否可以使用它自己的调度程序将控件隔离到它自己的线程。我不抱希望,但想知道。
我已经看到了 windows 的解决方案,但没有看到单个控件的解决方案。
我有一个控件,它必须在 UI 线程上做很多工作。它会导致 UI 的其他部分出现延迟。目前,将其拆分并在工作线程上工作并不容易,因为大多数操作都发生在依赖属性上,并且他们不喜欢跨线程。
但是我想知道是否可以使用它自己的调度程序将控件隔离到它自己的线程。我不抱希望,但想知道。
我已经看到了 windows 的解决方案,但没有看到单个控件的解决方案。
var controlThread = new Thread(() =>
{
var window = new MyWindow();
System.Windows.Threading.Dispatcher.Run();
});
controlThread.SetApartmentState(ApartmentState.STA);
controlThread.Start();
编辑:克莱门斯是对的,你显然不能简单地将控件添加到另一个线程的容器中。但是,如果从 UI 的角度来看,这种集成不是硬性要求,您可以通过使您的控件成为 Window 来完成这项工作。
另一种方法是将带有您的控件的窗口包装在另一个控件中。然后您可以移除窗口的边框并使位置、大小和可见性匹配。