有一个主窗体frmMain,和一个报警窗体frmAlarm。
主窗体把报警窗体做为一个全局对象
frmAlarm fa;还有一个标识IsShowfa=false;在加载的时候new了一下
fa=new frmAlarm();在一个子线程中
while(true)
{
//符合条件
if(....)
{
//窗体是否己经打开
if(!IsShowfa)
{
这里Show一下fa,仅限第一次}
fa显示之后永远不会被关闭,不用的时候hide()
}
在这里触发一个事件,通知报警窗体show,再显示数据thread.sleep(1)
}问题出来了,这个fa总是假死,不知道为什么,愁死人了!
=================================================================
如果我改成以下形式,就好了,可是每次程序启动的时候都要先闪一个报警窗体
frmAlarm fa;还有一个标识IsShowfa=false;在加载的时候new了一下
fa=new frmAlarm();
fa.show();
fa.hide();在一个子线程中
while(true)
{
//符合条件
if(....)
{
在这里触发一个事件,通知报警窗体show,再显示数据thread.sleep(1)
}

解决方案 »

  1.   

    貌似记得线程访问UI线程需要Invoke
      

  2.   

    简单模拟了下,不知道是不是你说的意思。。    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        #region"Declare";
            private Form2 modForm = new Form2();
            #endregion        #region"Method";
            delegate void ShowCallback();
            private void ShowForm()
            {
                if (this.InvokeRequired)
                {
                    ShowCallback d = new ShowCallback(ShowForm);
                    this.Invoke(d, new object[] { });
                }
                else
                {
                    if (modForm.IsDisposed)
                    {
                        modForm = new Form2();
                    }
                    modForm.Show();
                }
            }        /// <summary>
            /// Thread method.
            /// </summary>
            private void Test()
            {
                int i = 0;
                while (true)
                {
                    if (i == 10)
                    {
                        ShowForm();
                        break;
                    }                Thread.Sleep(300);
                    i++;
                }
            }
            #endregion        private void buttonTest_Click(object sender, EventArgs e)
            {
                Thread showThread = new Thread(new ThreadStart(Test));
                showThread.IsBackground= true;
                showThread.Start();
            }
        }
      

  3.   

    wpf 中如何实现? [email protected]