ここに私の状況です:WPF:私は、コントロールの状態をチェックする必要がある状況でマルチスレッド化を行う方法
私はWPFアプリケーションを持って、私は完了する時間がかかる方法を持っています。私はUIの応答性を失いたくないので、別のスレッドでそのメソッドを呼びたいと思います。 それはあまりにも長いですので、私は代わりに私が私が扱ってる何も表してこの短いプログラムを書いた、ここに私の全体のコードを貼り付けません。
public void MainWindow()
{
InitializeComponent();
ProcessThread = new Thread(TimeConsumingMethod);
ProcessThread.Name = "ProcessThread";
ProcessThread.Start();
}
public void TimeConsumingMethod()
{
this.Dispatcher.Invoke(() =>
{
MytextBlock.Text = "new text";
MyOtherTextBlock.Text = "Hello";
});
for (int i = 0; i < 50; i++)
{
Debug.WriteLine("Debug line " + i);
}
if (MyRadioButton.IsChecked == false) //????????????????
{
while (true)
{
if (DateTime.Now >= timePicker.Value)
break;
}
}
OtherMethod();
}
実は、私は上記のコードには2つの質問があります: 1.私は自分のコードでUIコントロールにアクセスするたびにthis.Dispatcher.Invoke() =>....
を使用する必要がありますか?つまり、私はいくつかのコントロールの状態をチェックし、Dispatcher.invokeを行う必要があるたびに(私の実際のコードで)メソッドにいくつかの場所を持っています - これらのコントロールにアクセスするより良い方法はありませんか? 2.上記のコードでは、最後にIFブロックがあります。このブロックでは、自分のRadioButtonの状態をチェックしています。そのIFの中には、時間がかかるコードがあります。ブロック場合は、これを処理するために、私のUIスレッドを言うだろう
this.Dispatcher.Invoke(() =>
{
if (MyRadioButton.IsChecked == false) //????????????????
{
while (true)
{
if (DateTime.Now >= timePicker.Value)
break;
}
}
});
そのコードを - しかし、私はそれを望んでいない:私はこれを行うことはできません!そうすれば、このIFブロックが完了するまでUI全体がフリーズします。このような状況にどう対処すればよいですか?
どのような時間がかかりますか?あなたはDb/Webからいくつかの情報を待っているのですか、いくつかのCPUを強く計算していますか? – 3615
私は自分のコードに2つの時間のかかる場所があります:1.計算を続けるために特定の時間待っています。 (私が与えた例のように)2.他のメソッド()は、コンピュータの性能(CPU%、RAMなど)に関する情報を収集し、ファイルに保存します。 – Loreno