-1
DispatcherTimer()를 사용하여 매초마다 메서드를 호출하려고합니다. 이 잘 작동하지만 타이머를 업데이트 할 때마다 메서드에서 UI Emements를 업데이트하려고 할 때마다 타이머가 매초마다 매 2 초씩 틱하는 것처럼 보입니다. 업데이트 할 UI 요소가 많을수록 틱 시간이 증가하고 창은 커질 수 없습니다 진드기 사이에서 화면 주위를 끌 수 있습니다.WPF 응용 프로그램 DispatchTimer가 1 초가 아닌 2 초마다 업데이트됩니다.
어떻게 초를 올바르게 업데이트 할 수 있습니까?
데이터를 수신 할 웹 API를 쿼리하고 있습니다. 이것이 문제가 될 수 있을까? 웹 API를
public static async Task<ProductTicker> GetProductTicker(string productId)
{
string ts = GetNonce();
string method = "/products/" + productId + "/ticker";
string sig = GetSignature(ts, "GET", method, string.Empty);
ProductTicker productTicker;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(baseURL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("CB-ACCESS-KEY", apiKey);
client.DefaultRequestHeaders.Add("CB-ACCESS-SIGN", sig);
client.DefaultRequestHeaders.Add("CB-ACCESS-TIMESTAMP", ts);
client.DefaultRequestHeaders.Add("CB-ACCESS-PASSPHRASE", passphrase);
client.DefaultRequestHeaders.Add("User-Agent", userAgent);
HttpResponseMessage response = client.GetAsync(method).Result;
response.EnsureSuccessStatusCode();
string json = await response.Content.ReadAsStringAsync();
productTicker = JsonConvert.DeserializeObject<ProductTicker>(json);
}
return productTicker;
}
당신은 Task.Result를 사용해서는 안 :이 솔루션은
DispatcherTimer_Tick
방법 비동기을하고GetProductTicker
전화를 기다리고 있었다. 대신'await client.GetAsync (method)'와''await pi.GetProductTicker (productId)'를 호출하십시오. 틱 처리기 async를 선언하십시오. – Clemens클레멘스 (Clemens)에게 시간을내어 주셔서 감사합니다. 당신은 저에게 해결책을 가르쳐 주셨습니다. 나는 작업 코드를 업데이트하고 게시 할 것이다. –
일반적으로 어떻게 수행해야하는지에 대한 내 편집을 참조하십시오. GetProductTicker는 이미 비동기입니다. Task.Run 필요 없음. – Clemens