我有一個惱人的問題... 我只是想顯示一個對話框,但它總是呈現兩次......下面的代碼:.ShowDialog()出現了兩次
private void tmr_sysdt_Tick(object sender, EventArgs e)
{
lbl_time.Text = System.DateTime.Now.ToLongTimeString();
lbl_date.Text = System.DateTime.Now.ToLongDateString();
if (GetLastInputTime() > Program.timeout)
{
frm_lockscreen login= new frm_lockscreen();
tmr_sysdt.Enabled = false;
if (login.ShowDialog(this) == DialogResult.OK) tmr_sysdt.Enabled = true;
}
}
的。
問題很簡單 - 但對我而言無法解決 - 對話框顯示爲重複(第二個會在第一個時間到達)。
我不知道,所以任何想法可以理解的:)
謝謝你,如果你需要更多的詳細信息,請發表評論!
詩:對不起,壞工程
編輯:GetLastInputTime()
[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
static uint GetLastInputTime()
{
uint idleTime = 0;
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.cbSize = (uint)Marshal.SizeOf(lastInputInfo);
lastInputInfo.dwTime = 0;
uint envTicks = (uint)Environment.TickCount;
if (GetLastInputInfo(ref lastInputInfo))
{
uint lastInputTick = lastInputInfo.dwTime;
idleTime = envTicks - lastInputTick;
}
return ((idleTime > 0) ? (idleTime/1000) : 0);
}
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));
[MarshalAs(UnmanagedType.U4)]
public UInt32 cbSize;
[MarshalAs(UnmanagedType.U4)]
public UInt32 dwTime;
}
運行GetLastInputTime +創建畫面可能需要更長的時間超過1秒? – 2014-12-27 14:07:48
不,我已經用5000ms嘗試過了...... :( – RAPTOR 2014-12-27 14:08:46
不相關,但是你知道在第一行執行完日期後,在兩個單獨的行上調用System.DateTime.Now是有問題的嗎?那麼你的表單將會顯示一個接近24小時的時間這是一個不太可能,但仍然buggy – doublehelix 2014-12-27 14:15:00