Vấn đề Perfomance C# khi get dữ liệu từ server?

Màn hình login nó như thế này bao gồm 3 textbox : textbox1, 2 và 3

Như thông thường thì khi nhấn tab nó sẽ chuyển vị trí focus vào những ô textbox khác nhau. Ở đây cũng vậy. Nhưng chả hiểu sao khi nhấn tab từ ô textbox đầu tiên để chuyển qua ô textbox thứ 2 thì rất chậm, đôi khi phải chờ một lúc nó mới chuyển qua. Còn từ textbox 2 chuyển sang textbox 3 thì vẫn ok rất nhanh. Tại sao kỳ vậy ?
Sau khi điều tra code thì mình mới phát hiện ra vấn đề ở chỗ khi từ ô textbox1 mà ta nhấn tab thì nó sẽ diễn ra một bước xử lý đó là lấy dự liệu từ ô này gửi lên server và nhận kết quả trả về để fill vào ô textbox 2. Như vậy quá trình gửi lên trả về sẽ mất thời gian và phải khi có đầy đủ dữ liệu trả về thì con trỏ mới focus vào ô textbox 2.
Sự kiện Enter của textbox 2 được viết như sau:

private void userIdComboBox_Enter(object sender, EventArgs e)
{
    GetUserId();
}

Hàm GetUserId được viết như sau:

private void GetUserId()
{
    List<string> userIds = HttpClientLib.GetUserId(ComboBox1.Text, CommonUtils.GetUUID());
    if (userIds != null && userIds.Count > 0)
    {
        ComboBox2.Items.Clear();
        foreach (string userId in userIds)
        {
            ComboBox2.Items.Add(userId);
        }
    }

}

Như vậy trong trình biên dịch đã diễn ra một bước chay ngầm rằng đó là các hàm xử lý phải chạy xong thì con trỏ mới focus vào ô textbox2.
Mình đã thử đặt hàm sleep để kiểm tra thì phán đoán rằng hàm gọi API chạy theo thread chứ không chạy theo kiểu tuần tự.
Vậy có giải pháp nào để làm sao chuyển tab giữa textbox 1 và 2 vẫn mượt mà đây ?

Bạn cho tab 1 chuyển qua tab 2 như bình thường kèm theo lệnh call API, nếu server không kịp trả về dữ liệu thì thay thế bằng icon loading, khi nào server trả về dữ liệu thì bổ sung vào sau (làm giống asynchronous bên javascript vậy á)

1 Like

Đó là các ComboBox chứ đâu phải TextBox.

GetUserId() nên thực hiện bất đồng bộ. Khi đó bạn vẫn có thể thao tác trên CBB 2 mà dữ liệu vẫn có thể tải sau.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?