【发布时间】:2014-12-26 11:03:41
【问题描述】:
我只是想上传一个 excel 文件并对其进行一些处理。 并想一步一步地显示进度。 我已经尝试了很多来展示我使用后台工作者和 Web 方法等的真正进展,但现在没有成功我正在考虑在 JavaScript 和 AJAX 的帮助下做到这一点。
我用 backgroundworker 尝试过的代码如下
Imports System.ComponentModel
Imports System.Threading
Public Class _Default
Inherits Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
End Sub
Dim bw As BackgroundWorker = New BackgroundWorker
Public Shared stopWorker As Boolean = False
Public Function startWorker() As Int16
If Not bw.IsBusy = True Then
bw.RunWorkerAsync()
End If
Return 0
End Function
Public Function testww(sender As Object, e As EventArgs) As Int16
bw.WorkerSupportsCancellation = True
bw.WorkerReportsProgress = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
Return 0
End Function
Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
For i = 1 To 500
If bw.CancellationPending = True Then
e.Cancel = True
Exit For
Else
' Perform a time consuming operation and report progress.
System.Threading.Thread.Sleep(500)
bw.ReportProgress(i * 0.5)
End If
Next
End Sub
Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
Me.tbProgress.Text = e.ProgressPercentage.ToString() & "%"
End Sub
Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
If e.Cancelled = True Then
Me.tbProgress.Text = "Canceled!"
ElseIf e.Error IsNot Nothing Then
Me.tbProgress.Text = "Error: " & e.Error.Message
Else
Me.tbProgress.Text = "Done!"
End If
End Sub
Private Shared Sub WorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
Dim worker As BackgroundWorker = TryCast(sender, BackgroundWorker)
If worker IsNot Nothing Then
System.Threading.Thread.Sleep(3000)
If Not stopWorker Then
worker.RunWorkerAsync()
Else
While stopWorker
Thread.Sleep(6000)
End While
worker.RunWorkerAsync()
End If
End If
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
bw.WorkerSupportsCancellation = True
bw.WorkerReportsProgress = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
Dim result = startWorker()
End Sub
End Class
而前端我只是厌倦了更改文本框中的值,例如
<%@ Page Title="Home Page" Language="VB" MasterPageFile="~/Site.Master" AutoEventWireup="true" Async="true" CodeBehind="Default.aspx.vb" Inherits="WebApplication2._Default" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
</asp:Content>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
<asp:TextBox ID="tbProgress" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
</asp:Content>
请帮帮我。
【问题讨论】:
-
无法在客户端电脑上使用 Javascript 读取 excel 文件
-
它工作正常,但我希望逐步完成任务的百分比,因为它最终从 for 循环中以 100%(完成!)状态显示出来,用户只能看到“完毕!”但我想要 1% 然后 2% 并继续... 100% 然后完成!
-
每次有任何变化都需要重新加载进度条
标签: javascript ajax vb.net