2013-05-30 65 views
0

我有以下場景,我需要在我的應用程序中顯示預覽選項,如什麼ms字。當我們點擊文件菜單項下的信息選項時,顯示文檔預覽。如何訪問和使用WPF中的不同線程上創建的對象

同樣,當有人點擊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; 
    } 
    } 

回答

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; 
} 
相關問題