あなたはマルチスレッド需要が発生した場合WPFアプリケーションでは、異常、異常な内容であれば、参照WPFコントロールにつながる:別のスレッドがオブジェクトを所有しているので、呼び出し元のスレッドがこのオブジェクトにアクセスすることはできません。次のように:を呼び出すコード:ThreadcountThread =新しいスレッド(新しいThreadStart(カウント)); countThread.Start();以下のメソッド呼び出しのイニシエータにカウント
あなたはマルチスレッド需要が発生した場合WPFアプリケーションでは、異常、異常な内容であれば、参照WPFコントロールにつながる:別のスレッドがオブジェクトを所有しているので、呼び出し元のスレッドがこのオブジェクトにアクセスすることはできません。次のように:
電話番号:
スレッドするCountThread =
新しいスレッド(新しいThreadStart(カウント));
countThread.Start();
次のように呼ばれるカウント法では例外をスローします
WPFオブジェクトは、同時実行スレッドを処理するための基本的な構造を提供DispatcherObjectに、由来します。WPFベースのメッセージングシステムスケジューラの実装。人気のWin32のメッセージポンプが非常に似ているとそれは動作します。実際には、WPFスケジューラは、クロススレッド呼び出しを実行するためのUSER32メッセージを使用しています。UI WPFのユーザスレッドを更新する場合、ディスパッチャを介して行うことにします。
呼ばれる次のコードを参照してください。
名前空間WpfThreadTest
{
/// <要約>
/// MainWindow.xaml的交互逻辑
/// </要約>
公共部分クラスのメインウィンドウ:ウィンドウ
{
スレッドするCountThread。
パブリックメインウィンドウ()
{
のInitializeComponent();
this.textBox1.Text = DateTime.Now.ToLocalTime()ToStringメソッド( "YYYY年MM月DD日HH:MM:SS")。;
するCountThread =新しいスレッド(新しいThreadStart(DispatcherThread));
}
プライベートボイドをbutton3_Click(オブジェクト送信者、RoutedEventArgs E)
{
IF(button3.Content.ToString()== "开始时间线程")
{
button3.Content = "スレッド停止時間";
IF(countThread.ThreadState == ThreadState.Suspended)
{
//スレッドが継続
countThread.Resumeを();
}
そう
countThread.Start();
}
他
{
button3.Content =「開始時刻スレッド「;
//スレッドサスペンション
countThread.Suspend();
}
}
公共ボイドDispatcherThread()
{
// UIを更新するサイクル条件によって制御することができます
一方、(真の)
{
///スレッド優先順位、最大タイムアウト、方法デリゲート(NO参照方法)
textBox1.Dispatcher.Invoke(
DispatcherPriority.Normal、TimeSpan.FromSeconds(1)、アクション新規新しい(UpdateTime));
スレッド。 SLEEP(1000);
}
}
プライベートボイドUpdateTime()
{
。this.textBox1.Text = DateTime.Now.ToLocalTime()ToStringメソッド( "日付YYYY、MM-DD HH:MM:SS");
}
プライベートボイドWINDOW_CLOSED(オブジェクト送信者のEventArgs E)
{
countThread.Abort();
Application.Current.Shutdown()。
}
}
}
{
/// <要約>
/// MainWindow.xaml的交互逻辑
/// </要約>
公共部分クラスのメインウィンドウ:ウィンドウ
{
スレッドするCountThread。
パブリックメインウィンドウ()
{
のInitializeComponent();
this.textBox1.Text = DateTime.Now.ToLocalTime()ToStringメソッド( "YYYY年MM月DD日HH:MM:SS")。;
するCountThread =新しいスレッド(新しいThreadStart(DispatcherThread));
}
プライベートボイドをbutton3_Click(オブジェクト送信者、RoutedEventArgs E)
{
IF(button3.Content.ToString()== "开始时间线程")
{
button3.Content = "スレッド停止時間";
IF(countThread.ThreadState == ThreadState.Suspended)
{
//スレッドが継続
countThread.Resumeを();
}
そう
countThread.Start();
}
他
{
button3.Content =「開始時刻スレッド「;
//スレッドサスペンション
countThread.Suspend();
}
}
公共ボイドDispatcherThread()
{
// UIを更新するサイクル条件によって制御することができます
一方、(真の)
{
///スレッド優先順位、最大タイムアウト、方法デリゲート(NO参照方法)
textBox1.Dispatcher.Invoke(
DispatcherPriority.Normal、TimeSpan.FromSeconds(1)、アクション新規新しい(UpdateTime));
スレッド。 SLEEP(1000);
}
}
プライベートボイドUpdateTime()
{
。this.textBox1.Text = DateTime.Now.ToLocalTime()ToStringメソッド( "日付YYYY、MM-DD HH:MM:SS");
}
プライベートボイドWINDOW_CLOSED(オブジェクト送信者のEventArgs E)
{
countThread.Abort();
Application.Current.Shutdown()。
}
}
}
ファイル名を指定して実行の効果が示されています