我正在使用C#中的用户界面。当用户点击“开始”按钮时,一个巨大的“for循环”开始工作。此过程需要几分钟。
我希望在forloop之前显示一条消息,并且在forloop之后消息将自动消失。我的目标是向用户提供诸如“正在运行,请稍候”的信息消息。
有没有这样做?
这是循环。它扫描图像并进行一些处理。
for (var i = 0; i <3504 ; i++)
for (var j = 0; j < 2306; j++)
{
........
}
答案 0 :(得分:2)
您没有说出您正在使用的GUI框架,因此我将假设表单。 WPF虽然类似。
当您点击名为&#34; button1&#34;的按钮时,我们假设工作已经开始。创建一个Form
子类,它是您的消息(例如,为了#34; MessageWaitForm&#34;而调用)。然后你可以像这样使用它:
private void SomeWork()
{
for (var i = 0; i <3504 ; i++)
for (var j = 0; j < 2306; j++)
{
........
}
}
private void button1_Click(object sender, EventArgs e)
{
using (MessageWaitForm form = new MessageWaitForm())
{
form.Shown += async (sender1, e1) =>
{
await Task.Run(() => SomeWork());
form.Close();
}
form.ShowDialog();
}
}
这会导致您的处理在单独的异步任务中执行,一旦显示消息对话框就开始执行。任务完成后,执行将返回form.Close()
语句,允许自动关闭消息表单。
请注意,我必须做一些假设并填写您的代码示例,以便可以提供可用的答案。以上内容可能与您现在的确切实现不符,但希望您能够理解所说明的基本概念并使其符合您的需求。
答案 1 :(得分:0)
也许您的代码看起来像这样?我没有机会编译这个,但它应该足以让你开始。
private void StartBtn_OnClick(object sender, EventArgs e)
{
_isRunning = true;
CodeIsRunning.Visibility = Visibility.Visible;
//Anything else needed (disable buttons, etc)
Task.Factory.StartNew(() => {
for (var i = 0; i < 3504; i++)
for (var j = 0; j < 2306; j++)
{
...
}
_isRunning = false;
});
}