C#マルチスレッドアクセスインターフェイス

黄舟
リリース: 2016-12-21 14:46:09
オリジナル
1559 人が閲覧しました

C#2005 以降、インターフェイス コントロールへのマルチスレッドの直接アクセスはサポートされなくなりました (インターフェイス作成スレッドとアクセス スレッドは同じスレッドではありません)。これはデリゲートを使用することで解決できます:

1 デリゲートを宣言します。デリゲート実装関数を定義します
view plaincopy to ClipboardPRint?
delegate void ShowProgressDelegate(int newPos)
{
// アクセスがスレッド内にあるかどうかを判断します
if (!_progressBar.InvokeRequired)
{
// そうでない場合は、直接操作します Control
_progressBar.Value = newPos;
}
else
{
// はいの場合、デリゲート アクセスを有効にします
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// Invoke を使用する場合、関数呼び出しが完了するまで待機しますが、BeginInvoke は直接待機しません 戻る
this.BeginInvoke(showProgress, new object[] { newPos });
delegate void ShowProgressDelegate(int newPos);
private void ShowProgress(int newPos)
{
// スレッド内にあるかどうかを判断します
if (!_progressBar.InvokeRequired)
{
// そうでない場合は、コントロールを直接操作します
_progressBar.Value = newPos;
}
else
{
// はいの場合、デリゲート アクセスを有効にします
ShowProgressDelegate showProgress = new ShowProgressDelegate(ShowProgress);
// Invoke を使用する場合、関数呼び出しが終了するまで待機しますが、BeginInvoke は待機せず、すぐに戻ります
this。 BeginInvoke(showProgress, new object[] { newPos });
}
}

2. スレッド関数を定義します (インターフェイス コントロールは別のスレッドで読み取ることができます)
view plaincopy to Clipboardprint?
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar .Minimum)
{
newPos = _progressBar.Minimum
}
Trace.WriteLine(string.Format("Pos: {0}", newPos));
// メソッドはここで直接呼び出され、有効かどうかは内部で自動的に決定されます デリゲート
ShowProgress(newPos);
Thread.Sleep(100);
}
}
private void ProgressStart()
{
while (true)
{
int newPos = _progressBar.Value + 10;
if (newPos > _progressBar.Minimum)
{
newPos = _progressBar.Minimum;
}
Trace.WriteLine(string. Format("Pos: {0}", newPos));
// メソッドはここで直接呼び出され、デリゲートを有効にするかどうかが内部で自動的に決定されます
ShowProgress(newPos);
Thread.Sleep(100);
}


3. スレッドの起動と終了
クリップボードプリントへのプレーンコピー?
private Thread _progressThread = new Thread(new ThreadStart(ProgressStart ));
// オプション、関数: スレッドが終了しない場合でも、プロセスは実行されます。終了できます
_progressThread.IsBackground = true;
_progressThread.Abort();
// 関数: 続行する前にスレッドが終了するまで待機します
_progressThread = null;
上記は C# マルチスレッド アクセス インターフェイスの内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!