나는이 의 WinForm 응용 프로그램 소비 할 필요가 웹 서비스를 . 웹 서비스는 데이터베이스에서 변경 사항을 확인합니다. 데이터베이스에 변경 사항이있는 경우 winform 응용 프로그램에 알려야하며 이에 따라 일부 작업을 수행합니다. 어떻게하나요?
내 winform 응용 프로그램에서 타이머를 사용하는 것을 생각하고 5 분마다 웹 서비스에 연결하고 데이터베이스에서 새로운 변경이 수행되었는지 확인합니다. 이것에 대한 다른 방법이 있습니까?
최신 정보:
답변을 기반으로 여기에 코드를 게시하고 있습니다.
class PerformTasks {
public static bool checkIfInProgress { get; set; }
public static void InitializeWebService()
{
try
{
Timer = new System.Timers.Timer(2000);
Timer.Elapsed += OnTimedEvent;
Timer.Enabled = true;
}
}
private static void callService()
{
using (var service = new WebServiceSoapClient())
{
checkIfInProgress = true;
task1();
task2();
popMessage();
checkIfInProgress = false;
}
}
private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
if (checkIfInProgress == false)
{
callService();
}
}
private static void PpopMessage()
{
var form = new Form
{
StartPosition = FormStartPosition.Manual,
ShowInTaskbar = false,
Text = "Message",
Size = new Size(500, 200),
};
var screen = Screen.FromPoint(form.Location);
Label lblText = new Label();
lblText.Text ="Test Text";
lblText.Dock = DockStyle.Fill;
lblText.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
form.MaximizeBox = false;
form.Controls.Add(lblText);
form.Location = new Point(screen.WorkingArea.Right - form.Width, screen.WorkingArea.Bottom - form.Height);
form.Show();
}
이제 하나의 작업, 즉 popMessage (위에 코드 조각)를 제외한 모든 것이 잘 작동합니다. 여기에서 양식이 열리지 만 항상로드되는 것처럼 보입니다. 시간을 사용하기 전에 잘 작동했습니다. 어떻게 처리 할 수 있습니까?
특히 웹 서비스가 WCF 기반이 아니거나 수정할 여유가없는 경우 유일한 방법입니다.
타이머를 사용하는 경우 System.Timers.Timer를 사용 하고 처리기가 UI 스레드에서 실행 되도록 여기 의 지침을 따르십시오 Elapsed
. 또한 타이머가 틱할 때 서비스 호출을 만드는 작업자 스레드 (또는 Task 또는 await on async 메서드)를 생성해야합니다. 서비스 호출이 진행되는 동안 UI가 차단되는 것을 원하지 않습니다.
웹 서비스를 제어 할 수있는 경우 서비스 내에서 클라이언트를 콜백 할 수 있는 WCF Duplex Services 를 탐색 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다