2016-08-26 3 views
0

У меня есть Main.cs и Pdf.cs. My Main.cs имеет 3 кнопки, каждый раз, когда вы нажимаете на каждую кнопку, она переходит на страницу PDF-файла в Pdf.cs. Ex. вы нажмете кнопку 1, появится новое окно и отобразит pdf-файл на стр. 1. Если вы нажмете кнопку 2, отобразится новое всплывающее окно pdf 2 и т. д.Winforms, как обновить страницы в формате pdf с помощью нитки

Мой вопрос: есть ли способ, чтобы файл pdf открывал только один 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

Привет @zxed, 'Application.Run (pdfReference);' запускает новый поток/окно. Я хочу только один поток/окно. Спасибо за Ваш ответ –

Смежные вопросы