.NETとthreadに関するdotsargのブックマーク (9)

  • C# - マルチスレッド C# コードの複雑さを最小限に抑える

    このブラウザーはサポートされなくなりました。 Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。 2019 年 2 月 Volume 34 Number 2 [C#] マルチスレッド C# コードの複雑さを最小限に抑える Thomas Hansen 氏 | 2019 年 2 月 フォーク (つまりマルチスレッド プログラミング) は、プログラミングの中でも特に正しく行うのが困難な操作です。その理由は並列性です。スレッドが 1 つだけの線形プログラミングとは全く異なる考え方が必要になります。この問題について考えるには、ジャグラー (曲芸師) は良い例です。ジャグラーは、複数のボールを互いにぶつけることなく、空中に保つ必要があります。これはかなり難しい課題です。それでも、適切なツールを使い、正しく考えることが

    C# - マルチスレッド C# コードの複雑さを最小限に抑える
  • lock ステートメント - 共有リソースへのアクセスを同期 - C# reference

    lock ステートメントは、指定のオブジェクトに対する相互排他ロックを取得し、ステートメント ブロックを実行してからロックを解放します。 ロックが保持されている間、ロックを保持するスレッドではロックを再度取得し、解放することができます。 他のスレッドはブロックされてロックを取得できず、ロックが解放されるまで待機します。 lock ステートメントにより常に、最大で 1 つだけのスレッドでその文が実行されます。 lock ステートメントの形式は次のとおりです。 lock (x) { // Your code... } 変数 x は、System.Threading.Lock 型の式、または参照型です。 コンパイル時に x が System.Threading.Lock 型であることがわかっている場合は、次とまったく同じになります。 using (x.EnterScope()) { // Yo

  • 【C#】時間のかかる処理をバックグラウンドで実行するには?[2.0のみ、C#、VB] − @IT

    Windowsアプリケーションでは、時間のかかる処理(以下、重い処理)はアプリケーションのメインのスレッドとは別のスレッドで行わなければならない。これは重い処理がアプリケーションのユーザー・インターフェイス(UI)をフリーズさせてしまうからだ。 たとえユーザーがその処理の完了まで待つ必要があるとしても、その間にウィンドウの移動や最小化ができなければならないし、可能であれば処理の進ちょく状況をプログレス・バーなどで表示すべきである。 .NET Framework 2.0では、そのような処理を容易に実装するための「BackgroundWorkerコンポーネント」が新しく追加されている。これを使えばスレッドをほとんど意識することなく、重い処理を別スレッド(バックグラウンド)で実行させることができる。 稿では、BackgroundWorkerコンポーネントを利用し、進ちょく状況を表示しながら、重

  • BackgroundWorker (バックグラウンドワーカー) の処理状況を表示する (C#プログラミング)

    BackgroundWorker (バックグラウンドワーカー)で処理の進行状況を表示する方法を紹介します。 UI 下図のUIを作成します。ボタン、テキストボックス、プログレスバー、BackgroundWorker(バックグラウンドワーカー)を配置します。 BackgroundWorker(バックグラウンドワーカー)のプロパティです。"WorkerReportsProgress"プロパティを"True"に設定します。 テキストボックスのプロパティです。"Multiline"プロパティを"True"にします。 コード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; usi

    BackgroundWorker (バックグラウンドワーカー) の処理状況を表示する (C#プログラミング)
  • スレッドの破棄

    マネージ スレッドを完全に停止するには、Abort メソッドを使用します。 Abort を呼び出すと、共通言語ランタイムが対象スレッドに ThreadAbortException をスローします。対象スレッドはこの例外をキャッチできます。 詳細については、「Thread.Abort」を参照してください。 メモ スレッドは、一度アボートされると、再起動できません。 Abort メソッドを呼び出しても、対象スレッドは ThreadAbortException をキャッチし、finally ブロック内の任意の量のコードを実行できるため、すぐには中止されません。 スレッドが終了するまで待機する必要がある場合は、Thread.Join を呼び出すことができます。 Thread.Join はブロッキング呼び出しで、スレッドが実際に実行を停止するか、オプションのタイムアウト間隔が経過するまで制御が戻りま

    スレッドの破棄
  • マネージ スレッド処理

    アプリケーションを開発する場合、プロセッサがシングルまたはマルチのいずれの場合でも、アプリケーションにユーザーとの迅速な対話を提供する必要があります。これはアプリケーションがほかの処理の実行中であっても同じことです。 アプリケーションによるユーザーへの迅速な応答を維持すると同時に、ユーザー イベントの合間やその処理中にプロセッサを使用する最も強力な方法は、複数の実行スレッドを使用することです。 ここでは、スレッド処理の基概念について、マネージ スレッド処理の概念と使用方法を中心に説明します。 .NET Framework Version 4 以降では、System.Threading.Tasks.Parallel クラスと System.Threading.Tasks.Task クラス、Parallel LINQ (PLINQ)、System.Collections.Concurrent

    マネージ スレッド処理
  • スレッドの使用とスレッド処理

    このセクションの各トピックでは、マネージ スレッドを作成して管理する方法、マネージ スレッドにデータを渡して結果を取得する方法、およびスレッドの破棄や ThreadAbortException の処理を行う方法について説明します。 このセクションの内容 スレッドを作成し、開始時にデータを渡す データを新しいスレッドに渡す方法とデータを取り戻す方法を含め、マネージ スレッドの作成について説明します。 スレッドの一時中断と再開 マネージ スレッドを一時中断および再開した場合の動作について説明します。 スレッドの破棄 マネージ スレッドを破棄した場合の影響、および ThreadAbortException の処理方法について説明します。 スレッドのスケジューリング スレッドの優先順位とそれがスレッドのスケジューリングに及ぼす影響について説明します。 参照 Thread Thread クラスのリフ

    スレッドの使用とスレッド処理
  • スレッドの一時中断と再開

    スレッドの活動を同期する最も一般的な方法は、スレッドをブロックおよび解放するか、またはコード領域またはオブジェクトをロックすることです。 ロックとブロックのしくみの詳細については、「同期プリミティブの概要」を参照してください。 スレッドをスリープ状態にすることもできます。 スレッドがブロックされているかまたはスリープ状態の場合は、ThreadInterruptedException を使用して待機状態を解除できます。 Thread.Sleep メソッド Thread.Sleep メソッドを呼び出すと、現在のスレッドはすぐに Thread.Sleep に渡した何ミリ秒かの間ブロックされ、残りのタイム スライスは別のスレッドに明け渡されます。 スレッドは、別のスレッドで Thread.Sleep を呼び出すことはできません。 Timeout.Infinite で Thread.Sleep を呼

    スレッドの一時中断と再開
  • 【C#】 @IT:.NET TIPS Windowsフォームで別スレッドからコントロールを操作するには? - C# VB.NET VS.NET

    連載目次 Windowsフォームでスレッドを作成した場合、フォームやフォーム上のコントロールに対しては、そのスレッドからの操作(フォームやコントロールが持つメソッドの呼び出しやプロパティの読み書き)は動作が保証されない。稿ではそのような処理を<安全>に行うためのプログラミングについて解説する。 フォーカスの移動を行うサンプル・プログラム 例えば、Visual Studio .NET(以降、VS.NET)でWindowsアプリケーションのプロジェクトを新規作成し、次の画面のように、2つのテキストボックス(TextBox1とTextBox2)と1つのボタン(Button1)を配置したとする。

    【C#】 @IT:.NET TIPS Windowsフォームで別スレッドからコントロールを操作するには? - C# VB.NET VS.NET
  • 1