2017-01-26 1 views
-2

저는 C#을 처음 사용하고 있으며 다른 하드웨어와 직렬 통신을 수행하는 코드를 작성하려고합니다. 작업을 수행하는 데 async/await를 사용하고 있습니다. 내 메소드가 class1이라는 다른 클래스에 있고 솔루션에 첨부 된 class1.cs 파일에 존재한다는 점을 감안하여 기다렸던 메소드에서 진행률 막대를 업데이트하려고합니다. XAML 코드에는 하나의 텍스트 블록, 진행률 막대 및 시작 단추가 하나 있습니다.범용 Windows 응용 프로그램에서 기다리고있는 다른 클래스의 UI를 업데이트하십시오.

"Class1"클래스의 "DummyWork"메소드에서 "progressbar1"을 어떻게 업데이트 할 수 있습니까?

이 문제에 대해 도움을 주시면 감사하겠습니다. 템플릿 코드는 다음과 같습니다.

MainPage.xaml.cs를 내용 :

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 
using System.Threading.Tasks; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 
using System.Threading; 
using uwptestapp1classes; 

namespace uwptestapp1 
{ 
    public sealed partial class MainPage : Page 
    {  
     public MainPage() 
     { 
      this.InitializeComponent(); 
      textBlock.Text = string.Empty; 
     } 

     private async void startBtn_Click(object sender, RoutedEventArgs e) 
     { 
      int asyncResult = 0; 
      progressbar1.Value = 0; 
      startBtn.IsEnabled = false; 
      textBlock.Text += "button press log: " + startBtn.Content + " button is pressed" + Environment.NewLine; 
      DateTime previousTime = DateTime.Now; 
      asyncResult = await Task.Run(() => Class1.DummyWork(previousTime)); 
      textBlock.Text += "Task have been done" + Environment.NewLine; 
      startBtn.IsEnabled = true; 
     } 
    } 
} 

Class1.cs의 내용 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Windows.UI.Xaml.Controls; 
using System.Threading; 

namespace uwptestapp1classes 
{ 
    public class Class1 
    { 
       public static int DummyWork(DateTime previoustime) 
     { 
      for (int i = 0; i <= 100;) 
      { 
       if ((DateTime.Now - previoustime).Milliseconds >= 500) 
       { 
        /* UI update code 
        * update "progressbar1.value" 
        */ 
        previoustime = DateTime.Now; 
       } 

       //delay without using task.delay 
       for (int myCounter = 0; myCounter < 50000000;) 
       { 
        myCounter++; 
       } 
      } 
      return 1; 
     } 
    } 
} 
+2

여기에는 질문이 없습니다. [왜 누군가가 나를 도울 수 있습니까?]를보십시오. 실제 질문이 아닙니까?] (http://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question) – BradleyDotNET

+0

@BradleyDotNET 의견을 보내 주셔서 감사합니다. 내 정확한 질문에 의해 업데이 트되었습니다. – Arash

+1

[이에 대한 많은 연구를하지 않은 것 같습니다] (https://www.google.com/?gws_rd=ssl#q=uwp+progress+bar+from+task+c%23). 너? – Romasz

답변

1

코드의 조각에서 진행 상황을보고하려면, 당신은 IProgress<T> 사용해야합니다

public class Class1 
{ 
    public static int DummyWork(DateTime previoustime, IProgress<DateTime> progress = null) 
    { 
    for (int i = 0; i <= 100;) 
    { 
     if ((DateTime.Now - previoustime).Milliseconds >= 500) 
     { 
     progress?.Report(DateTime.Now); 
     } 

     //delay without using task.delay 
     for (int myCounter = 0; myCounter < 50000000;) 
     { 
     myCounter++; 
     } 
    } 
    return 1; 
    } 
} 

진행률을 받으려면을 사용할 수 있습니다.:

public sealed partial class MainPage : Page 
{  
    private async void startBtn_Click(object sender, RoutedEventArgs e) 
    { 
    int asyncResult = 0; 
    progressbar1.Value = 0; 
    startBtn.IsEnabled = false; 
    textBlock.Text += "button press log: " + startBtn.Content + " button is pressed" + Environment.NewLine; 
    DateTime previousTime = DateTime.Now; 
    var progress = new Progress<DateTime>(time => 
    { 
     progressbar1.value = ...; 
    }); 
    asyncResult = await Task.Run(() => Class1.DummyWork(previousTime, progress)); 
    textBlock.Text += "Task have been done" + Environment.NewLine; 
    startBtn.IsEnabled = true; 
    } 
} 
+0

고맙습니다. "?" '진행중을 의미합니까? Report (DateTime.Now);'? – Arash

+0

'progress'가'null'이 아닌 경우에만'Report'를 호출하는 것을 의미합니다. –

관련 문제