0

我有以下情况,我需要在我的应用程序中显示预览选项,就像 ms-word 所做的那样。当我们单击文件菜单项下的信息选项时,将显示文档的预览。

同样,当有人单击 File\Info 面板时,我还想在我的应用程序中显示我的数据渲染部分的预览。为此,我编写了一个方法来获取我的应用程序的预览或屏幕截图,但该方法需要一些时间所以当有人点击文件菜单时,应用程序会挂起一段时间。因此,我尝试使用后台工作者以及普通线程机制在不同的线程上调用该方法。但问题是我在不同线程上调用的那个方法它返回一个图像源对象,当我尝试在后台工作者的运行工作者完成事件上访问该对象时,它会显示一个异常,比如这个对象的所有者是一个不同的线程表示返回的图像已在不同的线程上创建,因此我无法使用它。所以,

代码往往是这样的。

    public void ShowPreview()
   {
      ImageSource source =null;
      var bgWorkerThread = new BackgroundWorker()
       bgWorkerThread.DoWork +=(SENDER,ARGS)=> {
                                                 source = planView.GetPreviewImage();
                                                }
       bgWorkerThread.RunWorkerCompleted += (sender,args)=>
 {
    // Application crashes at this point 
    infoPanel.PreviewImage.source = args.Result as ImageSource;
  }
   } 
4

1 回答 1

0

您可以使用调用,也可以创建一个“存储类”(我认为它称为单例,但我不确定)在多个类和/或这样的线程中重用相同的实例。

class Test
{
    void main()
    {
        newThread nt = new newThread();
        Storage store = new Storage();
        nt.store = store;
        Thread t = new Thread(new ThreadStart(nt.runMe));
        t.Start();
    }
}
public class newThread
{
    public Storage store;
    public void runMe()
    {
        store.someNum = 8;
    }
}
public class Storage
{
    public int someNum;
}
于 2013-05-30T14:26:15.010 回答