잘 따르는 데 그리 어렵지 않습니다.티커가 제대로 표시되지 않는 양식이 표시됩니다.
현재 백그라운드에서 조용히 실행되는 작은 시간 기록 응용 프로그램을 만들고 있습니다. 티커가 다운 될 때마다, 애플리케이션은 사용자에게 마지막 프롬프트 이후에 자신이 한 일을 말하도록 프롬프트합니다. 결국 응용 프로그램에서 스프레드 시트에 데이터를 쓰게됩니다.
내가 지금까지 가지고있는 옵션 중 하나는 사용자가 기본 프롬프트 설정을 사용할지 여부를 사용자가 선택할 수있게합니다 (프롬프트를 놓칠 때마다 다음 프롬프트가 표시 될 때까지 계속 표시됩니다. 사용자가 잠시 동안 컴퓨터를 떠나면 입력 대기중인 화면에 몇 가지 프롬프트가 표시 될 수 있습니다.) 또는 모든 프롬프트를 결합하고자 할 때 (프롬프트가 나타나지 않고 새 메시지가 팝업 될 때마다, 이전 버전은 닫히고 새 버전은 이전 프롬프트 및 새 프롬프트 시간을 포함합니다.
사용자는 프롬프트를 끄기 위해 선택 상자를 선택할 수도 있습니다. 사용자가 프롬프트를 다시 켤 때 프롬프트가 꺼져있는 동안 (사용자가 전체 화면 응용 프로그램을 실행할 때 등) 프롬프트를 표시하면서 사용자가 수행중인 작업을 입력하라는 메시지가 나타납니다.
내 문제는 프롬프트를 생성하려고 할 때 제대로 표시되지 않는다는 것입니다. 나는 그 (것)들을 전혀 교묘히 다룰 수없고 통제의 아무도는 표시하지 않는다. 그들은 기본적으로 빈 형태처럼 보입니다.
여기 티커 사용하여 메시지를 생성하는 내 코드입니다 :
public void ticker(object source, System.Timers.ElapsedEventArgs e)
{
if (groupMissed)
{
incrementsMissed += 1;
if (incrementsMissed > 1)
{
IncrementForm form = (IncrementForm)Application.OpenForms["IncrementForm"];
if (form.InvokeRequired)
{
form.Invoke(new MethodInvoker(delegate { form.Close(); }));
}
}
}
else
{
incrementsMissed = 1;
}
IncrementForm theIncrementForm = new IncrementForm(this, e.SignalTime);
theIncrementForm.Show();
latestIncrement = e.SignalTime;
}
을 그리고 여기에 사용하여 프롬프트 생성하는 내 코드의 "턴을하라는 메시지를 표시"확인란 :
private void chkbxAlerts_Click(object sender, EventArgs e)
{
if (!chkbxAlerts.Checked)
{
// Ensures that the time missed is covered and restarts the timer
DateTime now;
now = DateTime.Now;
if ((now - latestIncrement).TotalMinutes >= 1) // Only records time if it is equal to or greater than one minute
{
// TO-DO: FIX
if (groupMissed)
{
incrementsMissed += 1;
if (incrementsMissed > 1)
{
IncrementForm form = (IncrementForm)Application.OpenForms["IncrementForm"];
if (form.InvokeRequired)
{
form.Invoke(new MethodInvoker(delegate { form.Close(); }));
}
}
}
else
{
incrementsMissed = 1;
}
IncrementForm theIncrementForm = new IncrementForm(this, now, latestIncrement);
theIncrementForm.Show();
latestIncrement = now;
}
timer.Enabled = true;
}
else
{
// Stops the timer
timer.Enabled = false;
}
}
당신은 더 이상 설명이 필요한 경우 제발 알려주세요. 어떤 도움을 주셔서 미리 감사드립니다.
매우 잘 형성된 질문입니다. 시세표는 타이머 방식입니까? 타이머가 다른 스레드에서 호출 중입니다 - 거기에서 GUI 양식을 업데이트 할 수 없습니다 (다른 스레드에서 양식을 표시하거나 생성 할 수는 있지만 확실하지는 않습니다). 예, 확실한 또 다른 스레드입니다 – NSGaga
예, 티커는 타이머의 Elapsed 이벤트에 의해 호출됩니다. 내가 말한 GUI 문제를 어떻게 해결할 수 있습니까? – Djentleman
작은 '실행 가능한'예를 만들 수 있습니까? 거기에 내가 추측하고있는 게 더 많아. – NSGaga