我在后台线程中将数据加载到 COM 对象时遇到问题。
我有一些文件需要很长时间才能加载,当这种情况发生时,我的应用程序会锁定并变得无法使用。因此,我试图将数据加载到后台线程BackgroundWorker
对象中。
我跟踪了我的代码,并Thread.Sleep()
为正在加载文件的用户控件放置了一个通用代码。我可以在Sleep()
通话期间使用该应用程序,但是当我Sleep()
用我的LoadFile()
通话替换通话时,它会锁定 UI 线程。
这是我正在调用的代码的简化版本:
private void CurrentDocumentChangedEvents()
{
//fire event for native file viewer
var worker = new BackgroundWorker();
worker.DoWork += worker_DoWork;
worker.RunWorkerAsync();
gridView1.Focus();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
//Call to UserControl to load the file selected.
LoadFileForViewing(filePath);
}
public void showFile(string filePath)
{
//Method inside UserControl that loads my selected file
Thread.Sleep(10000);
//axoixctrl_Viewer.ViewFile(false, filePath);
}
axoixctrl_Viewer 是加载到我的用户控件中的 COM 对象。用户控件位于 UI 线程中,它在表单加载时被初始化。问题与在 UI 线程上创建 COM 对象有关还是我的线程错误?
谢谢