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

时间:2014-07-11 08:04:06

标签: asp.net wpf

我正在使用WPF UserControl打印到XPS,然后可以轻松转换为PDF(抱歉XPS ..)。它作为一个独立的应用程序工作,但现在是时候看看我是否可以在Asp.Net内部工作

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

我非常有信心,应该能够破解WPF在ASP.NET中工作。具体来说,这意味着在IIS IO完成线程(或衍生的常规线程)上托管时构建WPF UserControl。

目前,当我尝试这个时,它会在构建UserControl时挂起,可能是由于缺少调度程序线程(消息泵)。我敢肯定它可能是任何WPF Visual甚至Window都会受到影响。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我使用了http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/

中的大部分代码
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;
}

为了我自己的需要,我需要能够等待返回的参数,毕竟不需要Dispatcher。事实证明,STA是关键。