通过线程使用分派器 [英] Using Dispatcher with thread
本文介绍了通过线程使用分派器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个rtf字符串列表,这些列表需要转换为html。我正在使用richtextbox控件将rtf转换为html。我的问题是此
I have a list of rtf strings that are needed to convert to html. I am using a richtextbox control to convert rtf to html. My problem is this
该解决方案也应该有效,但是如何在我的代码中实现该解决方案?
The solution should also work but how do i implement this solution in my code?
public string ConvertRtfToHtml(string rtfText)
{
try
{
var thread = new Thread(ConvertRtfInSTAThread);
var threadData = new ConvertRtfThreadData { RtfText = rtfText };
thread.SetApartmentState(ApartmentState.STA);
thread.Start(threadData);
try
{
thread.Join();
}
catch(ThreadStateException e){
logger.Error("ThreadStateException " + e.Message);
}
catch (ThreadInterruptedException e) {
logger.Error("ThreadInterruptedException " + e.Message);
}
return threadData.HtmlText;
}
catch (Exception e){
logger.Error("ConvertRtfToHtml: " + e.InnerException.Message);
return "Error";
}
}
private void ConvertRtfInSTAThread(object rtf)
{
MarkupConverter.MarkupConverter markupConverter = new MarkupConverter.MarkupConverter();
var threadData = rtf as ConvertRtfThreadData;
try
{
threadData.HtmlText = markupConverter.ConvertRtfToHtml(threadData.RtfText);
}
catch(Exception e){
logger.Error("ConvertRtfInSTAThread: " + e.Message);
}
}
此markupconverter.convertrtftohtml使用richtextbox控件。
this markupconverter.convertrtftohtml uses richtextbox control.
我在上面的代码中适合分派器吗?
Where do i fit the Dispatcher in above code?
Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
Dispatcher.Run();
推荐答案
我按如下方式使用它
private void ConvertRtfInSTAThread(object rtf)
{
MarkupConverter.MarkupConverter markupConverter = new MarkupConverter.MarkupConverter();
var threadData = rtf as ConvertRtfThreadData;
try
{
threadData.HtmlText = markupConverter.ConvertRtfToHtml(threadData.RtfText);
Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
Dispatcher.Run();
}
catch(Exception e){
logger.Error("ConvertRtfInSTAThread: " + e.Message);
}
}
这篇关于通过线程使用分派器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文