2016-08-26 55 views
0

我有Main.csPdf.cs。我的Main.cs有3個按鈕,每次點擊每個按鈕時,它都會導航到Pdf.cs中的pdf文件的頁面。防爆。您單擊按鈕1,將彈出一個新窗口並在第1頁上顯示pdf文件。如果您單擊按鈕2,它將顯示一個新的pdf彈出窗口頁面2等等。Winforms,如何使用線程更新pdf中的頁面

我的問題是,有沒有一種方式,該pdf文件將只能打開1個pdf文件,每次用戶點擊按鈕,它將只是更新/調用選定的頁面?

這裏的示例代碼,Main.cs:

public Main() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    ThreadStartSOP = new Thread(new ThreadStart(() => ThreadScreen(pageNumber))); 
    if(ThreadStartSOP.IsAlive) 
    { 
     //Update the page 
    } 
    else 
    { 
     ThreadStartSOP.SetApartmentState(ApartmentState.STA); 
     ThreadStartSOP.Start(); 
    } 
} 

private void ThreadScreen(int pageNumber) 
{ 
    Application.Run(new pdf(pageNumber)); 
} 

Pdf.cs

public pdf(int page) 
{ 
    this.axAcroPDF1.src = @"c:\example.pdf"; 
    this.axAcroPDF1.setCurrentPage(page); 
} 

public void UpdatePDFPage(int page) 
{ 
    this.axAcroPDF1.setCurrentPage(page); //Not updating.. 
    //I tried creating delegate, then invoking the method to it 
    //and still no luck in updating the pdf pages.. 
} 

回答

1

我不能告訴我們,如果Pdf.cs是一種形式 - 或別的東西;但基本上沒有提及你推出的表格;參考winform,然後可以從主窗體調用該窗體上的方法。

像這樣的東西應該做的伎倆

Pdf pdfReference; 

    private void dummyPage2() 
    { 
     if (pdfReference != null) 
     pdfReference.UpdatePDFPage(2); 
    } 


    private void ThreadScreen(int pageNumber) 
    { 
     pdfReference = new Pdf(1); 
     Application.Run(pdfReference); 
    } 
+0

Pdf.cs是一個WinForm。你的代碼和我的代碼一樣。謝謝你回答。 –

+0

不確定你的意思是「你的代碼是相同的」 - 注意參考對象是** pdfReference = new Pdf(1)**;在ThreadScreen中。而不是你在代碼中的線程。 – zxed

+0

Hi @zxed,'Application.Run(pdfReference);'正在啓動一個新的線程/窗口。我想要的是一個單獨的線程/窗口。感謝您的回答 –

相關問題