2017-06-12 33 views
0

私は多くのPDFを含むフォルダを持っています。ユーザがカテゴリDropDownListからカテゴリを選択してボタンをクリックすると、システムはファイル(全部ではない)を新しいフォルダにコピーしてからzipを生成します。AsyncCallback関数が動作しません

これらの手順は正常ですが、問題は生成されたzipサービスが終了したときです。

私は例を記述するつもりです:

<asp:Content ID="Content2" ContentPlaceHolderID="body" runat="Server"> 

    <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"> 
     <Services> 
      <asp:ServiceReference Path="SomeService.asmx" InlineScript="true" /> 
     </Services> 
    </asp:ScriptManagerProxy> 

    <script type="text/javascript"> 
     function copyFiles(id) { 
      SomeService.CopyFiles($ja("#DropDownList1").val(), id, FuncionSucceeded, FuncionFailed); 
     } 

     function FuncionSucceeded(result, eventArgs) { 
      document.getElementById("GenerateZip").click(); 
     } 

     function FuncionFailed(result, eventArgs) { 

     } 


    </script> 

    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Button ID="Button1" runat="server" Text="Generate Zip" /> 
      <asp:Timer ID="Timer1" runat="server" Interval="5000" Enabled="false"> 
      </asp:Timer> 
      <asp:Button ID="btnGenerateZip" runat="server" Style="display: none;" ClientIDMode="Static" /> 
      <asp:Image ID="Image1" runat="server" ImageUrl="~/images/loading.gif" 
       Visible="False" /> 
      <asp:Label ID="Label1" runat="server" Text="" Visible="false"></asp:Label> 
      <asp:LinkButton runat="server" Visible="false" ID="linkzip" Text="Descargar" /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
     </Triggers> 
    </asp:UpdatePanel> 
</asp:Content> 

とコード:

'This code call the client side to copy the files 
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click 
    If DropDownList1.SelectedValue = "0" Then 
     Exit Sub 
    End If 

    Dim pathName As String = "The path here" 

    If Not File.Exists(pathName) Then 
     Dim folder As String = Path.GetDirectoryName(pathName) 
     If Not Directory.Exists(folder) Then 
      Directory.CreateDirectory(folder) 
     End If 
    End If 

    Image1.Visible = True 
    Label1.Visible = True 
    Timer1.Enabled = True 
    Label1.Text = "Generating zip" 

    Dim script As String = "copyFiles('1234');" 
    ScriptManager.RegisterClientScriptBlock(Me.Page, Me.Page.GetType(), Guid.NewGuid().ToString(), script, True) 

End Sub 

'When the client side returns the function `FunctionSucceeded` call next function 

Private Sub btnGenerateZip_Click(sender As Object, e As EventArgs) Handles btnGenerarZip.Click 
    GenerateZip() 
End Sub 

Private Sub GenerateZip() 
    Try 
     Dim ws As New AnotherService.ServiceExample 
     Dim ar2 As New AsyncCallback(AddressOf DownloadFile) 
     Dim pathName As String = String.Format("{0}", path) 

     result = ws.BeginSomeFunction(path, ar2, ws) 

    Catch ex As Exception 
     generaZip = False 
    End Try 

End Sub 

コールバック関数:

Protected Sub DownloadFile(ar As IAsyncResult) 
     Dim ws As New AnotherService.ServiceExample 
     Try 
      Dim pathName As String ="Path" 
      ws.deleteFolder(pathName) 
      ws.EndSomeFunction(ar) 
      Image1.Visible = False 
      Label1.Text = "OK" 
      Timer1.Enabled = Image1.Visible 
      linkzip.Visible = True 
      generaZip = True 
     Catch ex As Exception 
      generaZip = False 
     End Try 
    End Sub 

タイマーチック:

Protected Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick 
     Select Case generaZip 
      Case True 
       Image1.Visible = False 
       Label1.Text = "Everything is ok" 
       Timer1.Enabled = Image1.Visible 
       linkzip.Visible = True 
      Case False 
       Image1.Visible = False 
       Label1.Text = "Error" 
       Timer1.Enabled = Image1.Visible 
     End Select 

    End Sub 

問題は、私たちがDownloadFile関数(非同期コールバック関数)に入っていて、そこに何もしていないときです。私はプロパティ、値、変数の値の多くを変更し、ティック関数が発生すると、何もしなかったようになります。

私はこれらの行のすべての変更されました:

Image1.Visible = False 
Label1.Text = "OK." 
Timer1.Enabled = Image1.Visible 
linkzip.Visible = True 
generaZip = True 
+0

あなたはgeneraZipがまだfalseであることを意味しますか?これはどこに宣言されているのですか? –

+0

yesはまだfalseですが、image1.visibleはまだtrueで、その他のプロパティはすべてtrueです。 @JimmySmith ページの先頭に宣言されていて、ポストバックがないときにinizializateする – Ary

+0

このTrue値を正しく保持するかどうかはわかりません。セッション変数を作成し、それにTrueを割り当てるとどうなりますか? 'Select Case Session(" generaZip ") –

答えて

0

を私は共有のようなgeneraZip変数を宣言して、そのようにそれが正常に動作しています。 ありがとうございました

+0

あなたはそれを理解してくれてうれしいです。その変数が宣言されたコードには気づきませんでした。 –

関連する問題