jquery ajax beforeSendで似ていて、C#で完了する方法はありますか?
Webでは通常、追加ボタンのように押すときに行うためbeforendSend:
、画像を表示して画像機能を非表示にする機能を設定しますcomplete:
そして今、私はC#デスクトップアプリケーションでやりたいと思っています. それに似たものはありますか?プログレスバーを使用するようなもの
jquery ajax beforeSendで似ていて、C#で完了する方法はありますか?
Webでは通常、追加ボタンのように押すときに行うためbeforendSend:
、画像を表示して画像機能を非表示にする機能を設定しますcomplete:
そして今、私はC#デスクトップアプリケーションでやりたいと思っています. それに似たものはありますか?プログレスバーを使用するようなもの
バックグラウンド処理と UI コールバックを実行する必要があります。以下の非常に簡単な例:
private void button3_Click(object sender, EventArgs e)
{
ProcessingEvent += AnEventOccurred;
ThreadStart threadStart = new ThreadStart(LongRunningProcess);
Thread thread = new Thread(threadStart);
thread.Start();
}
private void LongRunningProcess()
{
RaiseEvent("Start");
for (int i = 0; i < 10; i++)
{
RaiseEvent("Processing " + i);
Thread.Sleep(1000);
}
if (ProcessingEvent != null)
{
ProcessingEvent("Complete");
}
}
private void RaiseEvent(string whatOccurred)
{
if (ProcessingEvent != null)
{
ProcessingEvent(whatOccurred);
}
}
private void AnEventOccurred(string whatOccurred)
{
if (this.InvokeRequired)
{
this.Invoke(new Processing(AnEventOccurred), new object[] { whatOccurred });
}
else
{
this.label1.Text = whatOccurred;
}
}
delegate void Processing(string whatOccurred);
event Processing ProcessingEvent;
これは winforms アプリケーションですか? 使用できる ProgressBar コントロールがあります。WPF 用もあります。ただし、バックグラウンド スレッドで処理を実行して、UI の応答性を維持し、プログレス バーを更新する必要があります。
以下のように実装する必要があります。
FrmLoading f2 = new FrmLoading(); // Sample form whose Load event takes a long time
using (new PleaseWait(this.Location, () => Fill("a"))) // Here you can pass method with parameters
{ f2.Show(); }
お待ちください.cs
public class PleaseWait : IDisposable
{
private FrmLoading mSplash;
//public delegate double PrdMastSearch(string pMastType);
public PleaseWait(Point location, Action methodWithParameters)
{
//mLocation = location;
Thread t = new Thread(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);
}
}
それは100%正しく動作します...現在、私のシステムで動作しています。