C# 一段时间后页面重定向

C# 一段时间后页面重定向,c#,asp.net-core-2.0,razor-pages,C#,Asp.net Core 2.0,Razor Pages,我有一个任务正在运行,我正在生成背景和图像。 当我把图像放在服务器上时,我想转到显示图像的页面 我很难做到这一点,我想是因为缺乏asp.NETCoreV中razor页面的知识。2.0 基本上我有我的页面: <div> <img src="images/IAmGeneratingAnImage.png"/> </div> 我真的很想传递路径到新的页面以及,这可能也可以做到 这就是我的两个问题: a) 任务完成后如何重定向到页面? b) 如何将新的ima

我有一个任务正在运行,我正在生成背景和图像。 当我把图像放在服务器上时,我想转到显示图像的页面

我很难做到这一点,我想是因为缺乏asp.NETCoreV中razor页面的知识。2.0

基本上我有我的页面:

<div>
    <img src="images/IAmGeneratingAnImage.png"/>
</div>
我真的很想传递路径到新的页面以及,这可能也可以做到

这就是我的两个问题:
a) 任务完成后如何重定向到页面?
b) 如何将新的imagepath传递到新页面


还是我附加的问题完全错了?

我认为您的主要问题在于使用
Task.Factory.StartNew
。一般来说,在web应用程序中这样做不仅是一件坏事,而且当您这样做时,正在运行的代码会转移到一个新线程。这是一个要点,但其结果是,您的应用程序继续运行,当您的方法最终想要重定向时,就并没有什么可重定向的了:响应要么已经返回,要么已经太远而无法更改。更重要的是,现在运行在这里的代码甚至不能访问响应来更改它(如果可以的话),因为它不是在同一线程上下文中运行的

如果你想“在后台”做一些事情,你需要把它转移到一个实际的后台进程,而不是一个新线程。您可以使用HangFire或类似工具来完成此任务。然后继续并将响应返回给用户,然后使用signer或通过AJAX进行长轮询来检查后台作业的状态。作业完成后,您可以适当地重定向用户,但这需要在客户端而不是服务器端进行。一旦服务器返回响应,就完成了。它无法在未首先从客户端接收新请求的情况下发出重定向


最后,虽然与这里讨论的问题无关,但请注意
Thread.Sleep
正在阻塞。您应该改用
Task.Sleep

Response.Redirect(“OtherPageThatDisplaysImage”);//我猜现在。。。(问完问题后)谢谢。。hmm客户端检查只需在javascript中轮询即可完成。。(谢谢你的睡眠)
class xx:PageModel ...

    public void OnGet() {
      Task.Factory.StartNew(() => { CheckForImageAndRedirect(); });
    }

    private void CheckForImageAndRedirect() {
        string fileNameFull = "";
        do
        {
            var file = new FileInfo("C:\...\imageName.png");
            if (file.Exists )) 
                fileNameFull = file.FullName;

            Thread.Sleep(1000);
        }
        while (String.IsNullOrEmpty(fileNameFull));   

        RedirectToPage("OtherPageThatDisplaysImage"); // razorpage also.
    }