有没有办法在不使用showdialog()的情况下在后台工作线程中加载窗口?后台工作程序仅在从窗口获取一些输入后才终止。这里的问题是显示的窗口,但即使我们无法控制任何窗口,也不会呈现按钮和其他控件。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// acquire form
Acquire aq = new Acquire(Handle);
aq.Show();
do
{
// waiting for image
} while (!aq.isImageReady);
// doing Image operation
}
答案 0 :(得分:0)
您可以在启动后台工作程序之前显示该对话框,并声明一个volatile var,您可以在后台工作程序中更改/检查并保持其运行,直到它具有您想要的值,这将实现对话框关闭后。
答案 1 :(得分:0)
问题可能是因为您使用后台线程来显示窗口而不是进程的主UI线程。如果在正确的线程上没有使用Winform控件,则抛出异常或行为不正确。在这种情况下,问题可能是您的主窗口正在主UI线程上运行,而这个额外的对话框窗口正在创建并由另一个线程显示。
尝试从后台线程中引发一个事件,让UI知道它需要用户输入。然后,UI可以处理显示对话框并通过将数据传回后台线程来响应用户的输入。
为了防止后台线程继续进行,创建一个System.Threading.AutoResetEvent对象(WaitHandle)并在引发事件后立即调用该对象上的WaitOne方法,以通知UI显示该对话框。当UI通过将数据传递回后台线程来响应用户输入时,该代码可以调用AutoResetEvent对象上的Set方法,允许后台线程继续。