C# 从线程生成模式对话框的最短代码
假设我有一个线程一直在后台运行,以确定URL是否可访问。如果URL不可访问,则应用程序需要显示一个模式对话框。如果URL关闭,事情就无法继续。如果我只是从线程内部执行MessageBox.show,那么该消息框将不会是模态的。ShowDialog也无法工作。您可能需要使用Control.Invoke(或this.Invoke)C# 从线程生成模式对话框的最短代码,c#,winforms,C#,Winforms,假设我有一个线程一直在后台运行,以确定URL是否可访问。如果URL不可访问,则应用程序需要显示一个模式对话框。如果URL关闭,事情就无法继续。如果我只是从线程内部执行MessageBox.show,那么该消息框将不会是模态的。ShowDialog也无法工作。您可能需要使用Control.Invoke(或this.Invoke) 这将使它成为UI线程的模态。您可能需要使用Control.Invoke(或this.Invoke) 这将使它成为UI线程的模态。您可以尝试创建从后台线程触发的事件。让主窗
这将使它成为UI线程的模态。您可能需要使用Control.Invoke(或this.Invoke)
这将使它成为UI线程的模态。您可以尝试创建从后台线程触发的事件。让主窗体侦听事件,在这种情况下,它将以模态形式触发messagebox。尽管我更喜欢ocdecio建议的方法。您可以尝试创建从后台线程触发的事件。让主窗体侦听事件,在这种情况下,它将以模态形式触发messagebox。虽然我更喜欢奥德西奥建议的方法
public class FooForm : Form {
public static void Main() {
Application.Run(new FooForm());
}
public FooForm() {
new Thread(new Action(delegate {
Invoke(new Action(delegate {
MessageBox.Show("FooMessage");
}));
})).Start();
}
}
该程序创建一个窗体窗口,并立即创建另一个非gui线程,该线程希望在窗体的gui线程上弹出一个模式对话框窗口。表单的Invoke
方法接受一个委托,并在表单的gui线程上调用该委托
该程序创建一个窗体窗口,并立即创建另一个非gui线程,该线程希望在窗体的gui线程上弹出一个模式对话框窗口。表单的
Invoke
方法接受一个委托并在表单的gui线程上调用该委托。谢谢大家。我这样解决了这个问题:
线程:
private Thread tCheckURL;
// ...
tCheckURL = new Thread(delegate()
{
while (true)
{
if (CheckUrl("http://www.yahoo.com") == false)
{
form1.Invoke(form1.myDelegate);
}
}
});
tCheckURL.Start();
表格1内:
public delegate void AddListItem();
public AddListItem myDelegate;
Form1()
{
//...
myDelegate = new AddListItem(ShowURLError);
}
public void ShowURLError()
{
MessageBox.Show("The site is down");
}
不确定这是不是最短的方法。。但是它完成了任务。谢谢大家。我这样解决了这个问题: 线程:
private Thread tCheckURL;
// ...
tCheckURL = new Thread(delegate()
{
while (true)
{
if (CheckUrl("http://www.yahoo.com") == false)
{
form1.Invoke(form1.myDelegate);
}
}
});
tCheckURL.Start();
表格1内:
public delegate void AddListItem();
public AddListItem myDelegate;
Form1()
{
//...
myDelegate = new AddListItem(ShowURLError);
}
public void ShowURLError()
{
MessageBox.Show("The site is down");
}
不确定这是不是最短的方法。。但它完成了任务