2016-05-16 22 views
0

Ich möchte eine große Textdatei über die serielle Schnittstelle senden. I "Dispatcher.BeginInvoke" und Stahl ui einfrieren, bis Datei verwenden, wirdSo senden Sie einen großen Text mit seriellem Port in C# (WPF), ohne GUI einzufrieren?

gesendet
public delegate void SendFileDelegate(string _fileText); 
... 
    private void buttonTxSend_Click(object sender, RoutedEventArgs e) 
    { 
     this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new SendFileDelegate(SendFile), textBoxTx.Text); 
    } 

    private void SendFile(string _fileText) 
    { 
     var _fileLenght = _fileText.Length; 
     progressBarTx.Maximum = _fileLenght - 1; 
     for (int i = 0; i < _fileLenght; i++) 
     { 
      progressBarTx.Value = i; 
      string _character = textBoxTx.Text[i].ToString(); 
      try 
      { 
       _comPort.Write(_character); 
      } 
      catch (Exception _ex) 
      { 
       Message.Error("Error Write Data: " + _ex.ToString()); 
       break; 
      } 
     } 
    } 

, was soll ich tun? danke

Antwort

0

dieser Code funktioniert!

1

Sie können async/erwarten verwenden.

private async void buttonTxSend_Click(object sender, RoutedEventArgs e) 
{ 
    await Task.Run(() => 
    { 
     this.Dispatcher.Invoke(() => 
     { 
      SendFile(textBoxTx.Text); 
     }); 
    }); 
} 
+0

danke für Ihre Antwort, aber Stahl UI einfrieren. –