これは私の前の質問の続きです。これが 私の mainwindow.cs です。
public partial class MainWindow : Window
{
ObservableCollection<string> store;
public MainWindow()
{
SerialPort _serialPort = new SerialPort(SerialCom.findCOMPort(), 115200, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
string[] query = new string[3] { "t02", "t03", "t04" };
store = new ObservableCollection<string> { " ", " ", " " };
this.DataContext = this;
Thread thread = new Thread(delegate(){Process(store,query,_serialPort);});
thread.IsBackground = true;
try
{
thread.Start(); //catch sudden serial port closure exception
}
catch (Exception)
{
thread.Abort();
}
}
public static void Process(ObservableCollection<string> store, string[] query, SerialPort _serialPort)
{
while (true)
{
for (int i = 0; i < 3; i++)
{
string add = SerialCom.returnData(query[i], _serialPort);
if (store[i] != add)
{
store.Insert(i,add);
}
}
Thread.Sleep(300);
}
}
XAML ページに WPF リストビュー コントロールがあります。そのコントロールを非 UI スレッドで変更されている ObservableCollection にバインドしたいと思います。軟膏のハエは、プログラムの実行中にデバイスにクエリを実行する必要がある無限ループのようです。さらに、ObservableCollection は INotifyPropertyChanged を実装しているため、コレクションをコントロールにバインドすると、コントロールは他のコードなしで自動的に更新されます。コード ビハインドまたは XAML で?