Tôi thực hiện một số kiểm tra về tải biểu mẫu, nhưng nó đang khóa biểu mẫu trong một khoảng thời gian (một vài nghìn giây). Vì lý do này, tôi muốn hiển thị một thông báo như "tải ứng dụng ..", nhưng tôi không có ý tưởng làm thế nào tôi làm điều này. Tôi hy vọng điều này rõ ràng! Bất kỳ trợ giúp là rất đánh giá cao. Cảm ơn trước.Làm cách nào để hiển thị nội dung nào đó như "đang tải .." trong khi tôi thực hiện một số kiểm tra về tải biểu mẫu?
Trả lời
Lý tưởng nhất là những gì bạn muốn làm là thực hiện các kiểm tra của bạn trên một chuỗi nền, sao cho chuỗi giao diện người dùng không bị chặn. Hãy xem lớp BackgroundWorker.
Bạn nên móc kiểm tra của mình vào sự kiện DoWork của nhân viên nền và gọi phương thức RunWorkerAsync()
của BackgroundWorker từ sự kiện Form_Load để bắt đầu công việc nền.
Something như thế này (lưu ý, đây là chưa được kiểm tra):
BackgroundWorker bw = new BackgroundWorker();
public void Form_Load(Object sender, EventArgs e) {
// Show the loading label before we start working...
loadingLabel.Show();
bw.DoWork += (s, e) => {
// Do your checks here
}
bw.RunWorkerCompleted += (s, e) => {
// Hide the loading label when we are done...
this.Invoke(new Action(() => { loadingLabel.Visible = false; }));
};
bw.RunWorkerAsync();
}
Bạn có thể tạo một thread để hiển thị thông điệp tải.
Trước tiên, bạn cần một bool.
bool loading = true;
Tạo một sợi như:
Thread myThread = new Thread(new ThreadStart(Loading));
myThread .Start();
Sau đó, có một phương pháp:
private void Loading()
{
while(loading)
{
//Display loading message here.
}
}
Khi bạn đang thực hiện tải bất cứ điều gì chỉ cần đặt tải false và lốp sẽ chấm dứt.
Chuỗi giao diện người dùng của bạn sẽ vẫn bận trong vòng lặp, nó sẽ không thể hiển thị bất kỳ ứng dụng annd nào sẽ đóng băng –
Không. Đó là điểm của sợi chỉ. – Axis
Hãy xem thành phần BackgroundWorker. Bạn không cần bất kỳ kiến thức luồng nào cả.
Điều này có thể được thực hiện dễ dàng bằng cách hiển thị biểu mẫu riêng được thực hiện trên một chuỗi khác. Trong biểu mẫu này (gọi nó là frmSplash), bạn có thể đặt một gif động hoặc văn bản tĩnh. Mã bạn sẽ cần như sau trong biểu mẫu chính của bạn:
Khai báo một số biến sau lớp học.
public partial class frmMain : Form
{
public Thread th1;
static frmSplash splash;
const int kSplashUpdateInterval_ms = 1;
// Rest of code omitted
Sau đó thêm phương thức sau vào biểu mẫu chính của bạn. Điều này bắt đầu màn hình splash:
static public void StartSplash()
{
// Instance a splash form given the image names
splash = new frmSplash(kSplashUpdateInterval_ms);
// Run the form
Application.Run(splash);
}
Tiếp theo, bạn cần một phương pháp để đóng màn hình splash:
private void CloseSplash()
{
if (splash == null)
return;
// Shut down the splash screen
splash.Invoke(new EventHandler(splash.KillMe));
splash.Dispose();
splash = null;
}
Sau đó, trong Form tải chính của bạn, làm điều này:
private void frmMain_Load(object sender, EventArgs e)
{
try
{
Thread splashThread = new Thread(new ThreadStart(StartSplash));
splashThread.Start();
// Set the main form invisible so that only the splash form shows
this.Visible = false;
// Perform all long running work here. Loading of grids, checks etc.
BindSalesPerson();
BindCustomer();
BindBrand();
// Set the main form visible again
this.Visible = true;
}
catch (Exception ex)
{
// Do some exception handling here
}
finally
{
// After all is done, close your splash. Put it here, so that if your code throws an exception, the finally will close the splash form
CloseSplash();
}
}
Sau đó, nếu biểu mẫu chính bị đóng, hãy đảm bảo màn hình giật gân của bạn cũng đóng:
Mã cho hình thức Splash (Trong frmSplash.cs) như sau:
public partial class frmSplash : Form
{
System.Threading.Timer splashTimer = null;
int curAnimCell = 0;
int numUpdates = 0;
int timerInterval_ms = 0;
public frmSplash(int timerInterval)
{
timerInterval_ms = timerInterval;
InitializeComponent();
}
private void frmSplash_Load(object sender, EventArgs e)
{
this.Text = "";
this.MaximizeBox = false;
this.MinimizeBox = false;
this.ControlBox = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Menu = null;
}
public int GetUpMilliseconds()
{
return numUpdates * timerInterval_ms;
}
public void KillMe(object o, EventArgs e)
{
//splashTimer.Dispose();
this.Close();
}
}
Tôi hy vọng điều này sẽ giúp bạn. Nó có thể không phải là mã tốt nhất từng viết, nhưng nó đã làm việc cho tôi.
Bạn cần phải tạo một biểu mẫu tải ở đây .. bạn cần phải tạo đối tượng của biểu mẫu đó và được gọi bằng cách sử dụng khái niệm luồng ..và trong FrmLoading đặt một Picturebox và đặt hình ảnh .gif trong đó.
FrmLoading f2 = new FrmLoading();
using (new PleaseWait(this.Location,() =>MethodWithParameter())) { f2.Show(this); }
f2.Close();
Như được hiển thị ở trên mã bạn cần tạo lớp PleaseWait.
PleaseWait.cs
public class PleaseWait : IDisposable
{
private FrmLoading mSplash;
private Point mLocation;
public PleaseWait(Point location, System.Action methodWithParameters)
{
mLocation = location;
Thread t = new Thread(new ThreadStart(workerThread));
t.IsBackground = true;
t.SetApartmentState(ApartmentState.STA);
t.Start();
methodWithParameters();
}
public void Dispose()
{
mSplash.Invoke(new MethodInvoker(stopThread));
}
private void stopThread()
{
mSplash.Close();
}
private void workerThread()
{
mSplash = new FrmLoading(); // Substitute this with your own
mSplash.StartPosition = FormStartPosition.CenterScreen;
//mSplash.Location = mLocation;
mSplash.TopMost = true;
Application.Run(mSplash);
}
}
- 1. Làm cách nào để hiển thị hoạt ảnh gif tải ajax khi trang đang tải?
- 2. Tải nội dung trang về biến số
- 3. Làm cách nào để ngăn không cho RadioButton được kiểm tra khi Biểu mẫu tải?
- 4. Cách hiển thị thông báo tải khi iFrame đang tải?
- 5. Cách hiển thị màn hình tải trong khi nội dung trang web tải
- 6. cách hiển thị 'tải' trước khi nội dung từ các tab jquery được tải
- 7. Làm thế nào để hiển thị thông báo tải trong khi UIWebView tải nội dung của nó?
- 8. Làm cách nào để hiển thị nội dung nào đó trong khi thực thi tập lệnh SQL trên SQLServer?
- 9. Thay thế một phần nội dung WebView khi đang tải
- 10. Cách hiển thị gif tải trung bình trong khi biểu mẫu gửi đang được thực thi JQuery
- 11. Làm cách nào để kiểm soát màu của UIWebView (trước khi tải nội dung)?
- 12. Django - kiểm tra xem danh sách có chứa nội dung nào đó trong một mẫu
- 13. Làm cách nào để hiển thị thông báo "Đang tải ... vui lòng chờ" trong Winforms cho một biểu mẫu tải dài?
- 14. bằng cách sử dụng chế độ đơn giản, hiển thị nội dung tải trong khi nội dung bên trong khung nội tuyến tải
- 15. Cách hiển thị trạng thái "Đang tải" trong Android?
- 16. Kiểm tra tải nội dung tin nhắn trước khi yêu cầu AJAX hoàn thành với Capybara
- 17. Biểu đồ KendoUI - làm cách nào để hiển thị hoạt ảnh trong khi tải dữ liệu?
- 18. Cách hiển thị biểu tượng tải khi tìm kiếm tự động hoàn thành được thực hiện?
- 19. Làm cách nào để kiểm tra hàm băm của tôi tốt về tải trọng tối đa?
- 20. ASP.NET - Hiển thị thông báo khi trang đang tải
- 21. Tôi đang tải xuống tệp bằng Python urllib2. Làm cách nào để kiểm tra dung lượng tệp lớn?
- 22. Tải biểu mẫu mà không hiển thị nó
- 23. Làm thế nào để hiển thị một số hoạt ảnh trong khi điều khiển đang hiển thị?
- 24. Làm cách nào để tải tệp lên wordpress bằng biểu mẫu tải lên tùy chỉnh?
- 25. Hiển thị thanh tiến trình khi Hoạt động đang tải
- 26. Làm cách nào để hiển thị JPEG tiến bộ trong UIImageView trong khi đang được tải xuống?
- 27. Làm cách nào để kiểm tra việc gửi biểu mẫu trong Jasmine?
- 28. Làm cách nào để nhận tệp được tải lên từ biểu mẫu nội tuyến trong django?
- 29. Làm thế nào để tải lại một UITableView Trong khi tôi đang xem nó
- 30. Đơn vị Kiểm tra tệp tải lên, làm cách nào?
Perfect. Cảm ơn rất nhiều. ;) –