ホームページ バックエンド開発 C#.Net チュートリアル C# ビデオ チュートリアルに関するリソースの共有

C# ビデオ チュートリアルに関するリソースの共有

Sep 01, 2017 pm 01:39 PM
.net 共有

「C# チュートリアル」は、C# 言語の入門コースです。コースでは、.NET プラットフォームと C# の基本的な概念から始まり、C# 開発の基本的な構文、簡単なプログラムについて詳しく説明します。ロジック、Visual Studio ツールの使用スキル、一般的に使用されるツールの実装。同時に、コース関連の演習やプログラミング演習を通じて、学生が C# 言語にすぐに慣れることができるようにしたいと考えています。

C# ビデオ チュートリアルに関するリソースの共有

コース再生アドレス: http://www.php.cn/course/84.html

先生の教え方:

先生の講義はシンプルかつ奥深く、明瞭です論理的思考力を使用して生徒の注意を引き、理性を使用して教室での指導プロセスを制御することで、層ごとに連動し、厳密な議論と厳密な構造を組織化して分析します。教師の講義を聞くことで、学生は知識を学ぶだけでなく、思考のトレーニングも受け、教師の厳格な学問的態度に影響され、影響を受けます。 このビデオの中で最も難しい部分は、C# マルチスレッドです:

1. スレッドを使用する理由

1. スレッドを使用すると、コードを他のコードから分離し、アプリケーションの信頼性を向上させることができます。

2. スレッドを使用してコーディングを簡素化できます。

3. スレッドを使用して同時実行を実現できます。

2. 基本知識

1. プロセスとスレッド: オペレーティング システム実行プログラムの基本単位として、プロセスはアプリケーションのリソースを所有します。プロセスのリソースはスレッドによって共有されます。独自のリソースではありません。

2. フォアグラウンド スレッドとバックグラウンド スレッド: Thread クラスを通じて作成された新しいスレッドは、デフォルトでフォアグラウンド スレッドになります。すべてのフォアグラウンド スレッドが閉じられると、すべてのバックグラウンド スレッドも例外をスローせずに直接終了されます。

3. サスペンド (サスペンド) とウェイクアップ (レジューム): スレッドの実行順序とプログラムの実行は予測できないため、サスペンドとウェイクアップの使用はデッドロックになりやすいため、できるだけ使用しないようにする必要があります。実際のアプリケーションでは。

4. スレッドのブロック: スレッドが終了するまで呼び出し元のスレッドをブロックします。

5. スレッドを終了します: 中止: ThreadAbortException 例外をスローして、スレッドを終了します。割り込み: ThreadInterruptException 例外をスローしてスレッドを終了し、例外をキャッチすることで実行を続行できます。

6. スレッドの優先順位: AboveNormal BelowNormal 最高最低 通常、デフォルトは通常です。

3. スレッドの使用

スレッド関数は、パラメーターなしで渡すことも、パラメーターを使用して渡すこともできます (パラメーターは 1 つだけ)。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread t1 = new Thread(new ThreadStart(TestMethod));
            Thread t2 = new Thread(new ParameterizedThreadStart(TestMethod));
            t1.IsBackground = true;
            t2.IsBackground = true;
            t1.Start();
            t2.Start("hello");
            Console.ReadKey();
        }

        public static void TestMethod()
        {
            Console.WriteLine("不带参数的线程函数");
        }

        public static void TestMethod(object data)
        {
            string datastr = data as string;
            Console.WriteLine("带参数的线程函数,参数为:{0}", datastr);
        }
    } 
}
ログイン後にコピー

4. スレッドプール

スレッドの作成と破棄には一定量のオーバーヘッドが必要なため、スレッドを過剰に使用するとメモリリソースの無駄が発生するため、パフォーマンスを考慮してスレッドプールの概念が導入されました。スレッド プールはリクエスト キューを維持し、スレッド プール コードはキューからタスクを抽出し、実行のためにスレッド プール内のスレッドに委任します。そのため、スレッドは実行直後に破棄されません。バックグラウンドやスレッドの作成と破棄にかかるコストを削減できます。

スレッド プール スレッドのデフォルトはバックグラウンド スレッド (IsBackground) です。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //将工作项加入到线程池队列中,这里可以传递一个线程参数
            ThreadPool.QueueUserWorkItem(TestMethod, "Hello");
            Console.ReadKey();
        }

        public static void TestMethod(object data)
        {
            string datastr = data as string;
            Console.WriteLine(datastr);
        }
    }
}
ログイン後にコピー


5. タスククラス

ThreadPool の QueueUserWorkItem() メソッドを使用して非同期スレッドの実行を開始するのは非常に簡単ですが、このメソッドの最大の問題は、組み込みメカニズムがないことです。操作が完了したことを知らせるために、操作の完了後に戻り値を取得するメカニズムが組み込まれていますか。この目的のために、System.Threading.Tasks の Task クラスを使用できます。

Task オブジェクトを構築し、汎用 TResult パラメーターの操作の戻り値の型を渡します。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000);
            t.Start();
            t.Wait();
            Console.WriteLine(t.Result);
            Console.ReadKey();
        }

        private static Int32 Sum(Int32 n)
        {
            Int32 sum = 0;
            for (; n > 0; --n)
                checked{ sum += n;} //结果太大,抛出异常
            return sum;
        }
    }
}
ログイン後にコピー

タスクが完了すると、新しいタスクが自動的に開始されます。

1 つのタスクが完了すると、スレッドをブロックせずに別のタスクを開始できます。

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000);
            t.Start();
            //t.Wait();
            Task cwt = t.ContinueWith(task => Console.WriteLine("The result is {0}",t.Result));
            Console.ReadKey();
        }

        private static Int32 Sum(Int32 n)
        {
            Int32 sum = 0;
            for (; n > 0; --n)
                checked{ sum += n;} //结果溢出,抛出异常
            return sum;
        }
    }
}
ログイン後にコピー

6. デリゲートの非同期実行

デリゲートの非同期呼び出し: BeginInvoke() と EndInvoke()

namespace Test
{
    public delegate string MyDelegate(object data);
    class Program
    {
        static void Main(string[] args)
        {
            MyDelegate mydelegate = new MyDelegate(TestMethod);
            IAsyncResult result = mydelegate.BeginInvoke("Thread Param", TestCallback, "Callback Param");

            //异步执行完成
            string resultstr = mydelegate.EndInvoke(result);
        }

        //线程函数
        public static string TestMethod(object data)
        {
            string datastr = data as string;
            return datastr;
        }

        //异步回调函数
        public static void TestCallback(IAsyncResult data)
        {
            Console.WriteLine(data.AsyncState);
        }
    }
}
ログイン後にコピー

7. スレッド同期

1) アトミック操作 (インターロック): すべてのメソッドがアトミックな読み取りまたは書き込み操作を実行します。

2) lock() ステートメント: パブリック型をロックしないでください。ロックしないと、インスタンスがコード制御の範囲を超えてしまいます。ロックするプライベート オブジェクトを定義します。

3) Monitor はスレッド同期を実装します

Monitor.Enter() と Monitor.Exit() を通じて、排他的ロックが取得および解放され、取得後はリソースは排他的となり、他のスレッドはアクセスできません。

TryEnterメソッドもあり、リソースがリクエストできない場合はブロックせずに待機し、タイムアウトを設定して取得できない場合はfalseを返すことができます。

4) ReaderWriterLock

リソース操作に読み取りが多く書き込みが少ない場合、リソースの使用率を向上させるために、読み取り操作のロックは共有ロックになり、複数のスレッドがリソースを同時に読み取ることができますが、書き込み操作は排他的ロックになります。 1 つのスレッドのみの動作を許可します。

5) イベントクラスは同期を実装します

イベントクラスには終了状態と非終了状態の2つの状態があり、終了状態でWaitOneを呼び出すと成功を要求でき、Setを通じて時間状態を終了状態に設定できます。

1) AutoResetEvent(自動リセットイベント)

2) ManualResetEvent(手動リセットイベント)

6) Semaphore(セマフォ)

セマフォはカーネルオブジェクトが保持するint変数で、0の場合はスレッドがブロックされます。 、0 より大きい場合はブロック解除されます。セマフォ上の待機スレッドのブロックが解除されると、セマフォのカウントは +1 されます。

スレッドはWaitOneを通じてセマフォを1つ減らし、Releaseを通じてセマフォを1つ増やします。使い方はとても簡単です。

7) Mutex(ミューテックス)

専用のリソースで、使い方はセマフォと似ています。

8) クロスプロセス同期

システムレベルの同期は、同期オブジェクトの名前を設定することで実現できます。異なるアプリケーションは、同期オブジェクトの名前を通じて異なる同期オブジェクトを識別します。

以上がC# ビデオ チュートリアルに関するリソースの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Quark NetdiskをBaidu Netdiskに共有するにはどうすればよいですか? Quark NetdiskをBaidu Netdiskに共有するにはどうすればよいですか? Mar 14, 2024 pm 04:40 PM

Quark Netdisk と Baidu Netdisk は非常に便利なストレージ ツールですが、多くのユーザーはこれら 2 つのソフトウェアが相互運用可能かどうかを疑問に思っています。 Quark NetdiskをBaidu Netdiskに共有するにはどうすればよいですか?このサイトでは、QuarkネットワークディスクファイルをBaiduネットワークディスクに保存する方法をユーザーに詳しく紹介します。 Quark Network Disk から Baidu Network Disk にファイルを保存する方法 方法 1. Quark Network Disk から Baidu Network Disk にファイルを転送する方法を知りたい場合は、まず Quark Network Disk に保存する必要があるファイルをダウンロードして、次に開きますBaidu Network Disk クライアントを起動し、圧縮ファイルを保存するフォルダーを選択し、ダブルクリックしてフォルダーを開きます。 2. フォルダーを開いたら、ウィンドウ左上の「アップロード」をクリックします。 3. コンピュータ上でアップロードする必要がある圧縮ファイルを見つけ、クリックして選択します。

NetEase Cloud Music を WeChat Moments に共有する方法_NetEase Cloud Music を WeChat Moments に共有するチュートリアル NetEase Cloud Music を WeChat Moments に共有する方法_NetEase Cloud Music を WeChat Moments に共有するチュートリアル Mar 25, 2024 am 11:41 AM

1. まず、NetEase Cloud Music に入り、ソフトウェアのホームページ インターフェイスをクリックして、曲の再生インターフェイスに入ります。 2. 次に、曲の再生インターフェイスで、下の図の赤いボックスに示すように、右上隅にある共有機能ボタンを見つけて、クリックして共有チャンネルを選択し、共有チャンネルで「共有先」オプションをクリックします。下部にある [WeChat Moments] を選択すると、コンテンツを WeChat Moments に共有できます。

Baidu Netdisk で友達とファイルを共有する方法 Baidu Netdisk で友達とファイルを共有する方法 Mar 25, 2024 pm 06:52 PM

最近、Baidu Netdisk Android クライアントの新しいバージョン 8.0.0 がリリースされ、このバージョンには多くの変更が加えられただけでなく、多くの実用的な機能も追加されました。その中でも最も目を引くのがフォルダー共有機能の強化だ。ユーザーは簡単に友人を招待して仕事や生活で重要なファイルを共有できるようになり、より便利なコラボレーションと共有が実現します。では、友達と共有する必要があるファイルをどのように共有すればよいでしょうか? 以下では、このサイトの編集者が詳しく説明します。 1) Baidu Cloud APP を開き、まずホームページ上の関連フォルダーをクリックして選択し、次にインターフェイスの右上隅にある [...] アイコンをクリックします (以下を参照) 2) 次に、[+] をクリックします。 「共有メンバー」欄】を選択し、最後に全てにチェックを入れます

Mango TV メンバーのアカウント共有 2023 Mango TV メンバーのアカウント共有 2023 Feb 07, 2024 pm 02:27 PM

Mango TV には、さまざまな種類の映画、テレビシリーズ、バラエティ番組などのリソースがあり、ユーザーはそれらを自由に選択して視聴できます。 Mango TV 会員はすべての VIP ドラマを視聴できるだけでなく、ユーザーが楽しくドラマを視聴できるように最高解像度の画質を設定することもできます。以下では、編集者がユーザーが使用できる無料の Mango TV 会員アカウントをいくつか紹介します。急いで見てください。見てください。 Mango TV 最新のメンバー アカウント無料共有 2023: 注: これらは収集された最新のメンバー アカウントです。直接ログインして使用できます。パスワードを自由に変更しないでください。口座番号: 13842025699 パスワード: qds373 口座番号: 15804882888 パスワード: evr6982 口座番号: 13330925667 パスワード: jgqae 口座番号: 1703

win7 エンタープライズ エディションのアクティベーション キーは何ですか? win7 エンタープライズ エディションのアクティベーション キーは何ですか? Jul 09, 2023 pm 03:01 PM

win7 エンタープライズ エディションの最新のアクティベーション キーをお持ちですか?公式の win7 エンタープライズ バージョンをインストールする場合、Windows7 エンタープライズ プロダクト キーを使用してライセンス認証するように求められます。そうでないと、正しく動作しません。そこで、エディターはいくつかの win7 エンタープライズ バージョンのアクティベーション パスワードを共有します。見てみましょう。 Q3VMJ-TMJ3M-99RF9-CVPJ3-Q7VF3KGMPT-GQ6XF-DM3VM-HW6PR-DX9G8MT39G-9HYXX-J3V3Q-RPXJB-RQ6D79JBBV-7Q7P7-CTDB7-KYBKG-X8HHCP72QK-2Y3B8-YDHDV-29DQB-QKWWM6 JQ

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

C# の雇用の見通しはどのようなものですか? C# の雇用の見通しはどのようなものですか? Oct 19, 2023 am 11:02 AM

初心者でも経験豊富なプロフェッショナルでも、C# をマスターすることでキャリアへの道が開かれます。

Discuz WeChat共有が表示できない問題を解決 Discuz WeChat共有が表示できない問題を解決 Mar 09, 2024 pm 03:39 PM

タイトル: Discuz WeChat の共​​有が表示されない問題を解決するには、具体的なコード例が必要です モバイル インターネットの発展に伴い、WeChat は人々の日常生活に欠かせないものになりました。 Web サイト開発では、ユーザー エクスペリエンスを向上させ、Web サイトの露出を拡大するために、多くの Web サイトに WeChat 共有機能が統合され、ユーザーが Web サイトのコンテンツを Moments または WeChat グループに簡単に共有できるようになります。ただし、Discuz などのオープンソース フォーラム システムを使用すると、WeChat 共有が表示されないという問題が発生し、ユーザー エクスペリエンスに一定の困難が生じることがあります。

See all articles