我有一个ASPX页面(好吧,SharePoint,但它是一个页面,.net 4.5)。
从这个页面我想通过点击按钮开始一个长时间运行的导入过程(比方说15分钟)。该页面有一个标签,其中包含导入过程中的返回信息,所有内容都在更新面板中。更新面板已经可以用于页面上的其他内容 - 页面的部分内容(标签)会动态更新。
导入涉及许多步骤(比如说,导入“部门”,“用户”,“地址”)。
我工作的是页面,开始导入过程,但几分钟后它会超时。所以我没有看到进度或收到导入的返回信息。
我认为我在导入器类中创建事件并在每个导入步骤后使用包含进度信息的某个字符串(例如“导入的用户”,“导入的地址”)触发它时非常聪明。在ASPX页面上,我为此事件注册了一个事件处理程序,它将使用进度信息更新标签(如上所述:动态,就像在更新面板中一样)。
为了实现这个目的,我当然必须以非阻塞方式启动导入过程,所以我想在一个单独的线程中,而不是在页面的UI线程中。
我尝试使用ASYNC任务并稍后使用简单的ThreadStart(...)来使其工作。问题是,我只收到一些进度信息(如前3个)。其他返回信息不会返回,尽管看起来导入过程已完成这些步骤。
所以,现在我在质疑整个构造是否真的可以工作(使用事件和线程或异步任务,显然看起来它不能完全工作)。也许在ASPX页面上使用线程时我不知道有哪些问题?