情况是这样的:
我正在开发一个具有以下结构的简单应用程序:
Right?
嗯,在FormMain我有以下功能:
private void DoItInNewThread(ParameterizedThreadStart pParameterizedThreadStart, object pParameters, ThreadPriority pThreadPriority)
{
Thread oThread = new Thread(pParameterizedThreadStart);
oThread.CurrentUICulture = Settings.Instance.Language;
oThread.IsBackground = true;
oThread.Priority = pThreadPriority;
oThread.Name = "μRemote: Background operation";
oThread.Start(pParameters);
}
所以,每次我需要调用位于复杂函数我执行以下操作:
// This is FormMain.cs
string strSomeParameter = "lala";
DoItInNewThread(new ParameterizedThreadStart(ComplexFunctions.DoSomething), strSomeParameter, ThreadPriority.Normal);
另一个类,FormNotification,它是一个向用户显示进程的一些信息的表单。
可以从 FormMain 或 ComplexFunctions 调用此 FormNotification。
例子:
// This is ComplexFunctions.cs
public void DoSomething(string pSomeParameter)
{
// Imagine some time consuming task
FormNotification formNotif = new FormNotification();
formNotif.Notify();
}
FormNotify 有一个计时器,因此,10 秒后关闭表单。我没有使用 formNotif.ShowDialog 因为我不想将焦点放在这个表单上。
你可以检查一下这个链接看看我在通知中做了什么。
好的,问题是这样的:
当我打电话时表单通知 from 复函数这是从另一个线程中调用的FormMain... 这表单通知几毫秒后消失。
当你做这样的事情时,效果是一样的:
using(FormSomething formSomething = new FormSomething)
{
formSomething.Show();
}
如何避免这种情况呢?
这些是我不想使用的可能解决方案:
- 在 FormNotify 中使用 Thread.Sleep(10000)
- 使用 FormNotif.ShowDialog()
这是一个简化的场景(FormNotify 做了一些其他花哨的事情,只停留 10 秒,但它们与查看问题无关)。
谢谢你的时间!!!
对不起我的英语。