我是winform的新手,我无法弄清楚如何使用BackgroundWorker。
基本上我要做的就是:我有一个带有2个按钮的表单:“导入”和“退出”。当调用ImporButton_Click时,它所做的就是创建一个HttpListener并监听给定的URL。 ExitButton_Click关闭表单。
问题是,当我按“导入”时,表单会卡住并且处于“无响应”状态,直到某人正在呼叫监听器并将其释放。
我试图了解BackgroundWorker如何帮助我克服“卡住”问题。我不明白如何调用backgroundWorker1_DoWork方法
到目前为止,这是我的代码:
//Program.cs
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new ConfigurationForm());
}
}
//ConfigurationForm.cs
public partial class ConfigurationForm : Form
{
public ConfigurationForm()
{
InitializeComponent();
UrlTextBox.Text = @"enter URL here";
}
private void ImporButton_Click(object sender, EventArgs e)
{
try
{
String urlToListen = UrlTextBox.Text;
//Invoke MyListener
MyListener.StartListen(urlToListen); //assume this is implemented
}
catch (Exception exception)
{
string errorMsg = String.Format("An exception occured = {0}", exception);
MessageBox.Show(errorMsg);
}
}
private void ExitButton_Click(object sender, EventArgs e)
{
this.Close();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
}
}
那么,现在呢?我如何调用backgroundWorker1_DoWork ???
对任何可以提供帮助的人来说都是10倍
答案 0 :(得分:1)
您需要调用此方法RunWorkerAsync
backgroundWorker1.RunWorkerAsync();
如果您想通过argument
将一些DoWork
传递到处理程序DoWorkEventArgs
,请尝试RunWorkerAsync
的第二次重载:
backgroundWorker1.RunWorkerAsync(yourArgument);