我正在使用WPF UserControl打印到XPS,然后可以轻松转换为PDF(抱歉XPS ..)。它作为一个独立的应用程序工作,但现在是时候看看我是否可以在Asp.Net内部工作
当用户点击浏览器中的按钮时,我希望它向服务器发送请求,然后服务器将完成打印。目前,我可以通过在具有WCF服务的单独进程中启动WPF打印机并从Web应用程序调用服务来完成此工作。这样,WPF函数可以在STA进程内本地工作。
我非常有信心,应该能够破解WPF在ASP.NET中工作。具体来说,这意味着在IIS IO完成线程(或衍生的常规线程)上托管时构建WPF UserControl。
目前,当我尝试这个时,它会在构建UserControl时挂起,可能是由于缺少调度程序线程(消息泵)。我敢肯定它可能是任何WPF Visual甚至Window都会受到影响。
有什么想法吗?
答案 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是关键。