Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体应用程序c中的异步显示#_C#_Winforms_Asynchronous_Count - Fatal编程技术网

C# Windows窗体应用程序c中的异步显示#

C# Windows窗体应用程序c中的异步显示#,c#,winforms,asynchronous,count,C#,Winforms,Asynchronous,Count,我认为以下问题并不少见。但由于我不知道如何寻找正确的答案,所以我仍然坚持下去 我在表单中有一个标签,我想同时显示一些单词 public string[] words = new string[]{"add", "ado", "age", "ago", "aid", "ail", "aim", "air", "and", "any", "ape", "apt", "arc", "are", "ark", "arm", "art", "ash", "ask", "auk",

我认为以下问题并不少见。但由于我不知道如何寻找正确的答案,所以我仍然坚持下去

我在表单中有一个标签,我想同时显示一些单词

    public string[] words = new string[]{"add", "ado", "age", "ago", "aid", "ail", "aim", "air", "and", "any", "ape", "apt", "arc", "are", "ark", "arm",
        "art", "ash", "ask", "auk", "awe", "awl", "aye", "bad", "bag", "ban", "bat", "bee", "boa", "ear", "eel", "eft",
        "far", "fat", "fit", "lee", "oaf", "rat", "tar", "tie"};

    private async void button1_Click(object sender, EventArgs e)
    {

        for (int i = 0; i <= 39; i++)
        {
            label1.Text = words[i];
            Thread.Sleep(100);
        }
    }
public string[]words=新字符串[]{“add”、“ado”、“age”、“ago”、“aid”、“ail”、“aim”、“air”、“and”、“any”、“ape”、“apt”、“arc”、“are”、“ark”、“arm”,
“艺术”、“灰烬”、“询问”、“海雀”、“敬畏”、“锥子”、“是”、“坏”、“袋子”、“禁令”、“蝙蝠”、“蜜蜂”、“蟒蛇”、“耳朵”、“鳗鱼”、“eft”,
"远,","胖","胖","胖","胖","胖";
私有异步无效按钮1\u单击(对象发送方,事件参数e)
{

对于(int i=0;i理想情况下,您应该使用System.Windows.Forms.Timer进行更新-否则您将阻止主线程。但是,您可以调用Form.Refresh来强制在循环中进行更新。

尝试此方法

private async void button1_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 100; i++)
    {
        label1.Text = i.ToString();
        await Task.Run(() => { Thread.Sleep(100); });
    }
}
private async void按钮1\u单击(对象发送方,事件参数e)
{
对于(int i=0;i<100;i++)
{
label1.Text=i.ToString();
wait Task.Run(()=>{Thread.Sleep(100);});
}
}

您可以使用不会阻塞UI线程的任务延迟:

 private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            for (var i = 0; i <= 100; i++)
            {
                ((Button) sender).Content = i.ToString();
                await Task.Delay(100);
            }
        }
private async void按钮base\u OnClick(对象发送方,RoutedEventArgs e)
{
对于(var i=0;i这将起作用

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 0; i <= 100; i++)
        {
            Application.DoEvents();
            label1.Text = i.ToString();
            Thread.Sleep(100);
        }
    }
private void按钮1\u单击(对象发送者,事件参数e)
{

对于(int i=0;i您可以使用
System.Threading.Timer

 System.Threading.Timer timer;
 int i=-1;

public string[] words = new string[]{"add", "ado", "age", "ago", "aid", "ail", "aim", "air", "and", "any", "ape", "apt", "arc", "are", "ark", "arm",
        "art", "ash", "ask", "auk", "awe", "awl", "aye", "bad", "bag", "ban", "bat", "bee", "boa", "ear", "eel", "eft",
        "far", "fat", "fit", "lee", "oaf", "rat", "tar", "tie"};
  private async void button1_Click(object sender, EventArgs e)
 {
 timer = new System.Threading.Timer(timer_Tick, null, 0, 100); //Time delay 100
 }
 private void timer_Tick(Object state)
        {                
                try
                {

                    i++;


                    this.Invoke((MethodInvoker)delegate
                    {
                         label1.Text = words[i];
                         if (i==words.Length )
                          timer.Change(Timeout.Infinite, Timeout.Infinite);
                    });  

                }
                catch (Exception ex)
                {                      
                }
                finally
                {                      
                }

        }
ThreadStart-safir;
线程Nakh;
委托无效kar(字符串p);
私有无效按钮1\u单击(对象发送者,事件参数e)
{
safir=新螺纹起点(NeveshtanDarBarchasb);
Nakh=螺纹(safir);
Nakh.Start();
}
公共空间无需标准化
{

对于(int i=0;i为什么不在Windows应用程序中尝试使用计时器控件?设置适当的间隔,并在计时器运行时禁用计时器一次。)done@MuhammedShevilKP我的问题只是一个例子
我想同时显示一些单词
看起来不像你想做的那样。同时显示意味着它们在同一时间都可见e-->
label1.Text=String.Join(“,words)定时器的使用意味着任务将在线程线程中执行。这不会引起访问UI控件的问题吗?它不需要上下文切换,导致性能影响吗?不确定,为什么你认为这个解决方案是理想的。@ 3615是不正确的。WiFrice定时器事件处理程序发生在UI线程中。o需要编组。这是一个非常好的WIN32thing@MickyD好的,谢谢你纠正我。但这与System.Threading.Timer也有关系吗?很明显,Windows窗体中的应用程序是要使用的应用程序,但我的注释基于其他Timer类,因为它没有明确指定。@3615不用担心。不,因为System.tThreading.Timer使用不同的线程。对于WinForms应用程序(OP的问题),如果要与GUI交互,建议使用
System.Windows.Forms.Timer
。请参阅备注
Application.DoEvents()
可能会导致应用程序命令处理程序重新进入;通常是邪恶的;并且不善待puppies.System.Threading.Timer,如果其目的是更新UI,则不应在WinForms中使用。“”。此外,如果使用
System.Windows.Forms.Timer,则不需要调用()
ThreadStart safir ;
Thread Nakh;
delegate void kar(string p);
private void button1_Click(object sender, EventArgs e)
{
    safir = new ThreadStart(NeveshtanDarBarchasb);
    Nakh =  Thread(safir); 
   Nakh.Start();
}

public void NeveshtanDarBarchasb()
{
  for (int i = 0; i <= 39; i++)
    {
         Benevis(I.ToString());
        Thread.Sleep(100);
    }
}
public void Benevis(string p)
{
     if( lbl.InvokeRequired)
     {
          kar k= new kar(Benevis);
          Invoke(k,new object[]{p};
      }
      else
      {
           label1.Text = p;
       }
}