今天我遇到了一个特殊的问题,DragDrop函数在使用MTAThread时不起作用。我搜索过MSDN,我用谷歌搜索了关键词的各种组合。
任何人都可以向我解释为什么不允许这样做?有没有办法解决它?
答案 0 :(得分:1)
我认为您会收到以下错误,这可能会解释原因:
System.Threading.ThreadStateException: Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it.
通常,在创建UI的任何线程上使用STAThread以防止无响应/挂起UI。没有什么可以阻止您为窗口创建单独的线程(但STA),以便您的UI响应:
Thread thread = new Thread(() =>
{
Window1 w = new Window1();
w.Show();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
可以有工作线程,可以是MTA。工作线程可以通过将消息传递给Dispatcher(在WPF的情况下)与UI线程交互
看看这篇博文,旧的,但提供了有关公寓和抽水的大量信息