1

私の現在のプロジェクトは、SQL Server バックエンドを持つ WPF アプリケーションです。

WPF では、UI は UI スレッドによってのみ変更できます。別のスレッドで UI の変更を行う必要がある場合は、ディスパッチャ オブジェクトを呼び出してアクションを指定できます。事実上、これはデリゲートを WM_ メッセージにマッピングしています。

SQL Serverへのlinqデータコンテキストもシングルスレッドであるため、この「ディスパッチャ」のアイデアをWPFからコピーして、パブリックデータコンテキストへのリクエストを常に「パブリックSQLスレッド」からマーシャリングするために使用できる同様のオブジェクトを作成するにはどうすればよいですか?

起動時にデータ コンテキストを初期化し、SqlThread.Invoke() メソッドによって起動されるまでスリープするスレッドを作成する必要があると思います。

このアイデアに似たもの、またはこれを行うのに役立つ資料を知っている人はいますか?

4

1 に答える 1

0

LINQ-to-SQL を意味する場合は、DataContextこれに反対することをお勧めします。DataContexts を短命の作業単位として使用し、次にDispose()それを使用します。多くの異なる目的のためにそれを保持しないでください (古いデータ、キャッシュの増加、スレッド化、同時実行性、および (重要な) 失敗/ロールバックの処理方法に関する問題があります)。

全体像を見てみましょう:

基本的に、プロデューサー/コンシューマー キューなどのワーク キューを記述しています。そのようなものはたくさんあります。または、比較的簡単に記述できます (たとえば、ここまたはここを参照してください。アイテムをデキューして処理するループを追加するだけです)。IIRC .NET 4.0 には、事前に用意されたそのような構造も (並列拡張に) 含まれています。

于 2009-10-16T11:21:37.830 に答える