ユーザーがログインした後にいくつかのコントロールを作成しようとしています。バックグラウンドスレッドでコントロールを追加しますか?
私は3つのタブを持つTabControlを持っています。ログインする最初のもの、2番目のものはたくさんのタイルを表示する必要がある場所です(MahApps.Metroタイル)。各タイルはホテルの部屋を表しています。
3番目のタブには、未確定の進行状況バーが表示されます。ユーザーがログインすると、このタブが表示されます。私はこれをどうやっ
:
//User is logged in, so display the progress bar and add controls
tabControl.SelectedIndex = 2; // display the progress bar tab
private void populateHotel(Hotel hotel)
{
List<Room> rooms = hotel.rooms;
Tile tile;
tile_wrapper.Children.Clear();
foreach (Room room in rooms)
{
sql.insertHotelRoom(room);
tile = new Tile();
tile.Title = room.room_num;
tile.Content = room.name_fa;
tile.FontFamily = titleRooms.FontFamily; // titleRooms is a textbox
tile.TitleFontSize = item1.TitleFontSize; // item1 is an already created tile
tile.FontSize = item1.FontSize;
tile_wrapper.Children.Add(tile);
}
// Now display the rooms tab
tabControl.SelectedIndex = 1;
}
問題は、これはそれがすべてのタイルを作成するまでプログレスバーを含めて、UIスレッドとすべてのフリーズがフリーズ、です。
プログレスバーがまだ応答するようにコントロールを追加するにはどうすればよいですか?何をやっている
populateHotelTabのforeachループにThread.Sleep(1000)を追加すると、テストとして、 UIはまだ応答する必要がありますか?私はこれをしましたが、プログレスバーはまだフリーズしています。 – SMahdiS
@SMahdiS:どのforeachループですか? 'pop.HotelTab'に' Thread.Sleep'を追加すると、UIはまだフリーズします。これは、UIスレッドをフリーズする場合に予想される動作です。しかし、なぜあなたはそれをしますか?ソリューションのポイントは、UIスレッドの外で時間のかかる作業を行うことです。タスクで 'Thread.Sleep'を使うのはお勧めできません。実行しているスケジューラーが分からないからです。 – Sefe
私はたくさんのことを学んだ、ありがとう。ところで、そのことが何であるか: "()=> {}"。それは代表者ですか?もしそうでなければ、それは何で、私は何のためにgoogleするべきですか?私はJavaプログラミングに慣れていて、これらのことは私にとっては新しく思えます。 – SMahdiS