C# 后台工作窗口控件未渲染
有没有办法在后台工作线程中加载窗口而不使用showdialog()?后台工作程序仅在从窗口获得一些输入后才终止。这里显示的是问题窗口,但按钮和其他控件不会呈现,即使我们无法控制任何窗口C# 后台工作窗口控件未渲染,c#,.net-3.5,backgroundworker,C#,.net 3.5,Backgroundworker,有没有办法在后台工作线程中加载窗口而不使用showdialog()?后台工作程序仅在从窗口获得一些输入后才终止。这里显示的是问题窗口,但按钮和其他控件不会呈现,即使我们无法控制任何窗口 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { // acquire form Acquire aq = new Acquire(Handle); aq.Show();
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
}
您可以在启动后台工作程序之前显示该对话框,并声明一个变量,您可以在后台工作程序中更改/签入该变量,并使其保持运行,直到该变量具有所需的值,这将在对话框关闭后实现。您可以在启动后台工作程序之前显示该对话框,并声明一个变量,您可以在后台工作程序中更改/检查该变量,并保持其运行,直到它具有所需的值,这将在对话框关闭后实现。问题可能是因为您使用后台线程来显示窗口,而不是进程的主UI线程。Winform控件如果未在正确的线程上使用,则会引发异常或行为不正确。在这种情况下,问题可能是主窗口在主UI线程上运行,而此附加对话框窗口由其他线程创建和显示 尝试从后台线程引发事件,让UI知道它需要用户的输入。然后,UI可以通过将数据传递回后台线程来处理对话框的显示和对用户输入的响应
为了防止后台线程进一步运行,请创建System.Threading.AutoResetEvent对象(WaitHandle),并在引发事件后立即调用该对象上的WaitOne方法,以通知UI显示对话框。当UI通过将数据传递回后台线程来响应用户输入时,该代码可以调用AutoResetEvent对象上的Set方法,从而允许后台线程继续。问题可能是因为您使用后台线程来显示窗口,而不是进程的主UI线程。Winform控件如果未在正确的线程上使用,则会引发异常或行为不正确。在这种情况下,问题可能是主窗口在主UI线程上运行,而此附加对话框窗口由其他线程创建和显示 尝试从后台线程引发事件,让UI知道它需要用户的输入。然后,UI可以通过将数据传递回后台线程来处理对话框的显示和对用户输入的响应
为了防止后台线程进一步运行,请创建System.Threading.AutoResetEvent对象(WaitHandle),并在引发事件后立即调用该对象上的WaitOne方法,以通知UI显示对话框。当UI通过将数据传递回后台线程来响应用户输入时,该代码可以调用AutoResetEvent对象上的Set方法,从而允许后台线程继续。根据我的项目架构,在启动后台工作程序之前,我无法显示对话框。根据我的项目架构,在启动后台工作程序之前,我无法显示该对话框。您从何处调用backgroundWorker线程?同一窗体上的按钮单击事件从何处调用backgroundWorker线程?同一窗体上的按钮单击事件