使用ASP.Net构造WPF UserControl时线程挂起

使用ASP.Net构造WPF UserControl时线程挂起,asp.net,wpf,Asp.net,Wpf,我正在使用WPF用户控件打印到XPS,然后可以很容易地转换为PDF XPS。。。它作为一个独立的应用程序工作,但现在是时候看看我是否可以让它在Asp.Net中工作了 当用户单击浏览器中的按钮时,我希望它向服务器发送请求,然后服务器将完成打印。目前,我可以通过使用WCF服务在单独的进程中启动WPF打印机,并从web应用程序调用该服务来实现这一点。通过这种方式,WPF函数在STA进程内本机工作 不过,我很有信心,人们应该能够破解WPF以在ASP.NET中工作。具体地说,这意味着在托管在IIS IO完

我正在使用WPF用户控件打印到XPS,然后可以很容易地转换为PDF XPS。。。它作为一个独立的应用程序工作,但现在是时候看看我是否可以让它在Asp.Net中工作了

当用户单击浏览器中的按钮时,我希望它向服务器发送请求,然后服务器将完成打印。目前,我可以通过使用WCF服务在单独的进程中启动WPF打印机,并从web应用程序调用该服务来实现这一点。通过这种方式,WPF函数在STA进程内本机工作

不过,我很有信心,人们应该能够破解WPF以在ASP.NET中工作。具体地说,这意味着在托管在IIS IO完成线程或派生的常规线程上时构造WPF UserControl

目前,当我尝试此方法时,它在构造UserControl时挂起,可能是由于缺少dispatcher线程消息泵。我敢肯定,这可能是任何WPF的视觉,甚至窗口,这将受到影响


有什么想法吗?

我使用了

出于我自己的需要,我需要能够等待返回的参数,而不需要调度器。原来STA是钥匙

private string WrapWPFBasedFunctionCall(string Parameter1)
{
    //Need to host this call to the WPF based function on an STA thread
    string returnedString = "";
    Thread thread = new Thread(() =>
    {
        var p = new My.WPF.PrinterClass();
        returnedString = p.DoPrint(Parameter1);

        //System.Windows.Threading.Dispatcher.Run(); //Perhaps use this for a longer running Window, but not needed for this issue
    });

    thread.SetApartmentState(ApartmentState.STA); //This is essential
    thread.Start();
    thread.Join(); //Wait for the thread to finish

    return returnedString;
}