2017-11-01 6 views
0

Ich habe eine Liste von RTF-Zeichenfolgen, die zum Konvertieren in HTML benötigt werden. Ich verwende ein Richtextbox-Steuerelement, um RTF in HTML zu konvertieren. Mein Problem ist thisVerwenden von Dispatcher mit Thread

Die Lösung sollte auch funktionieren, aber wie implementiere ich diese Lösung in meinem 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); 
     } 

    } 

Dieses Markupconverter.convertrtftohml verwendet Richtextbox-Steuerelement.

Wo kann ich den Dispatcher in den obigen Code einfügen?

Dispatcher dispatcher = Dispatcher.CurrentDispatcher; 
dispatcher.BeginInvokeShutdown(DispatcherPriority.Normal); 
Dispatcher.Run(); 

Antwort

0

habe ich es wie folgt

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); 
     } 

    } 
Verwandte Themen