2016-08-26 12 views
0

私はMain.csPdf.csを持っています。私のMain.csには3つのボタンがあります。各ボタンをクリックするたびにPdf.cのpdfファイルのページにナビゲートします。 Ex。ボタン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を行う必要がWinフォームです。あなたのコードは私のコードと同じです。それに感謝してくれてありがとう。 –

+0

"あなたのコードは同じです"とは何を意味するのかわかりません - 参照オブジェクトは** pdfReference = new Pdf(1)**です。 ThreadScreenの内部にあります。コード内にあるスレッドではありません。 – zxed

+0

こんにちは@zxed、 'Application.Run(pdfReference);'は新しいスレッド/ウィンドウを開始しています。私が望むのは、単一のスレッド/ウィンドウです。ご回答有難うございます –

関連する問題