0

私は C# 4.0 winform アプリケーションでインターフェイスを開発して、いくつかの SMS をまとめて起動しています。各メッセージの内容は異なるため、メッセージを 1 つずつ送信する必要があります。エンド ユーザーが SMS を送信できるフォームがありますが、それは 1,000 を超える可能性があります。

キューを管理したい。ユーザーが SMS を送信すると、それはキューに送信され、キューは SMS を 1 つずつ送信します。

そのため、キューを管理するフォームを作成する必要があります。問題は、アプリケーションを正常に動作させ、バックグラウンドでキューが SMS を送信することです。

では、どうすればこのタスクを達成できますか? を試しBackGroundWorkerましたが、フォームで別のスレッドを維持する方法がわかりません。

4

3 に答える 3

2

すべてのフォームは UI スレッド上にある必要があります。SMS の送信は、BackgroundWorker.DoWorkイベントによって実行される必要があります。その後、フォームの更新はBackgroundWorker.RunWorkerCompletedイベントによって行われます。

UI スレッドは、SWF (winforms) 用アプリケーションのメイン スレッドです。

C# 4.0 以降を使用している場合は、Take Parallel ライブラリ ( http://msdn.microsoft.com/en-us/library/dd460717.aspx ) も調査することをお勧めします。しかし、まず BackgroundWorker の実装を機能させます。次に、TPL を使用して同時 SMS を送信します。本当にスピードアップできます。

于 2013-01-29T07:41:59.747 に答える
1

アプリケーションの存続期間中実行される1つのスレッド(ワーカースレッドと呼ばれる)を作成する必要があります。

キュー、またはさらに優れた同時キューが必要ですhttp://msdn.microsoft.com/en-us/library/dd267265.aspx

ワーカースレッドは、アイテム(sms)がキューに表示されるのを待ち、そのアイテムを取得して作業を行います。

UIはその作業から完全に切り離されています。

これは、クラスThreadの最も基本的な使用法です。

バックグラウンドワーカーは最適なソリューションではありません。もちろん、洗濯機を使って家を建てることはできますが、ほとんどの人はレンガを使います。

于 2013-01-31T04:23:14.123 に答える
0

Threadを開始し、その上に(親なしで)フォームの新しいインスタンスを作成してから、メッセージループ(プロジェクトのテンプレートのMainメソッドにあるコード)を開始できます。すべてのフォーム(通常はすべてのGDIオブジェクト)は、それを作成するスレッドでのみ使用できることを忘れないでください。たとえば、別のスレッドで子フォームを作成してから、親のフォームを作成することはできません。すべてのGUIスレッドはメッセージループを実行する必要があります。

于 2013-01-29T08:57:42.260 に答える