2012-04-01 10 views
-1

私はラベルに何かテキストを表示させようとしていますが、しばらくしてからそれをリフレッシュして後で何かを再表示できるようにしようとしています。しかし、現時点では、ラベルを一時停止する方法はわかりません(可能な場合)。これまでLabelコントロールの値を定期的に更新するにはどうすればよいですか?

マイコード:

foreach (var x in mod) 
{ 
     labelWARNING.Visible = true; 
     labelWarningMessage.Text = "This module has a prerequisite module: " + x; 
     //need a pause here to give user sufficient time to read the above text 
     //labelWarningMessage.Text = ""; 
} 
+0

awaitキーワードを使用するpublic async Task SomeMethod()または
public async void buttonClick(object sender, RoutedEventArgs e)
にする必要がありますたとえとにかく表示されています。 foreachループでさえも – harold

+0

どこの条件付き? – a7omiton

+0

これはwinform、wpf、またはasp.netですか? –

答えて

0

タイマーを使用しました。

private void timer1_Tick(object sender, EventArgs e) 
{   
     labelWarningMessage.Text = ""; 
     labelWARNING.Visible = false; 
} 
0

が、私はそれのために別のスレッドを使用します。

labelWARNING.Visible = true; 
labelWarningMessage.Text = "This module has a prerequisite module: " + item; 
new Thread(() => { 
    Thread.Sleep(5000); 
    Dispatcher.BeginInvoke((Action)(() => { labelWARNING.Visible = false; })); 
}).Start(); 

(リサイズは、本質的に同じでなければなりませんため、これは、WPFのためである)

+1

また、UIスレッドでコールバックするので、簡単なタイマーを使用してください。 – usr

+4

@usr:確かに:)あなたは答えとしてコードを入れてもいいですか? OPにはより多くのバリエーションがあります。 – Vlad

+0

@usrアイデアのおかげで、私はタイマーとその働きをしました:P。 – a7omiton

1

からあなたの質問は、定期的にユーザーに情報を表示するために、ステータスラベルのようなものの値を変更する必要があるようです。 winformsを使用している場合は、次のようなタイマーとデリゲートを使用できます。

質問から、定期的にユーザーに情報を表示するには、ステータスラベルのような値を変更する必要があるようです。私はそれが役に立てば幸い

//First create a delegate to update the label value 
public delegate void labelChanger(string s); 

//create timer object 
Timer t = new Timer(); 

//create a generic List to store messages. You could also use a Queue instead. 
List<string> mod = new List<string>(); 

//index for list 
int cIndex = 0; 

//add this in your Form Load event or after InitializeComponent() 
t.Tick += (timer_tick); 
t.Interval = 5000;//how long you want it to stay. 
t.Start(); 

//the timer_tick method 
private void timer_tick(object s, EventArgs e) 
{ 
    labelWarningMessage.Invoke(new labelChanger(labelWork), mod[cIndex]); 
    cIndex++; 
} 

//the method to do the actual message display 
private void labelWork(string s) 
{ 
    labelWARNING.Visible = true; 
    labelWarningMessage.Text = "This module has a prerequisite module: " + s; 
} 

:あなたはリサイズを使用している場合は、タイマーと、このようなデリゲートを使用することができます。がんばろう。

EDIT:思想私は戻ってくると私はしなかった見つけるためにずっと前にこのコードを掲載...多分誰かが役に立つことを見つけるかもしれません。

はまた、この方法は、デリゲートを使用せずに動作するだけではタイマーを作成するので、この場合には冗長になり、唯一のデリゲートの使用とUIスレッドアクセス部のために有用です。

0

async/await用に更新されました。これは意志

// Update all text with warning message 
foreach (var x in mod) 
{ 
     labelWARNING.Visible = true; 
     labelWarningMessage.Text = "This module has a prerequisite module: " + x; 
} 

// Wait 1 second or 1000ms  
await Task.Delay(1000); 

// Now dismiss the message 
foreach (var x in mod) 
     labelWarningMessage.Text = ""; 

周囲の機能が一時停止を使用して、UIスレッドので、新しいテキストISNをブロックしたい、助けないでしょう

関連する問題