等待抽象函数完成 c#
Wait for abstract function to finish c#
我有两个 class(CLASS1 和 CLASS2),从 CLASS1 我调用了一个抽象方法,我需要等待它结束并且显示消息 "End Process...",我该如何解决?
CLASS-1:
public abstract partial class CLASS1 : Form
{
public CLASS1()
{
Console.WriteLine("Start Process ABSMethod1");
ABSMethod1("var1", "var2");
Console.WriteLine("End Process ABSMethod1");
Console.WriteLine("Start Process ABSMethod2");
ABSMethod2(1, 2);
Console.WriteLine("End Process ABSMethod2");
}
protected abstract void ABSMethod1(String var1, String var2);
protected abstract void ABSMethod2(int var1, int var2);
}
CLASS-2:
class CLASS2: CLASS1
{
protected override void ABSMethod1(String var1, String var2)
{
if (var1 == "test")
{
Task.Factory.StartNew(() =>
{
Parallel.ForEach<clssmt>(items, item =>
{
/* ... */
});
});
}
//if i use Task.Wait() freezes UI.
}
protected override void ABSMethod2(int var1, int var2)
{
Task.Factory.StartNew(() =>
{
Parallel.ForEach<clssmt>(items, item =>
{
/* ... */
});
});
}
}
我使用 protected virtual async Task
和 await
解决了这个问题,但我不确定这是否是最佳解决方案。如果我使用此解决方案,消息 "End Procces" 在该任务完成之前很少显示。
i need wait to end of it and show a message "End Process...", how can i solve this?
您将那些已执行的 Task
公开给调用者。您也不通过构造函数调用它们,而是通过初始化方法:
protected abstract Task FirstMethodAsync(string var1, string var2);
protected abstract Task SecondMethodAsync(int var1, int var2);
public async Task InitializeAsync()
{
Console.WriteLine("Start Process ABSMethod1");
await FirstMethodAsync("var1", "var2");
Console.WriteLine("End Process ABSMethod1");
Console.WriteLine("Start Process ABSMethod2");
await SecondMethodAsync(1, 2);
Console.WriteLine("End Process ABSMethod2");
}
我有两个 class(CLASS1 和 CLASS2),从 CLASS1 我调用了一个抽象方法,我需要等待它结束并且显示消息 "End Process...",我该如何解决?
CLASS-1:
public abstract partial class CLASS1 : Form
{
public CLASS1()
{
Console.WriteLine("Start Process ABSMethod1");
ABSMethod1("var1", "var2");
Console.WriteLine("End Process ABSMethod1");
Console.WriteLine("Start Process ABSMethod2");
ABSMethod2(1, 2);
Console.WriteLine("End Process ABSMethod2");
}
protected abstract void ABSMethod1(String var1, String var2);
protected abstract void ABSMethod2(int var1, int var2);
}
CLASS-2:
class CLASS2: CLASS1
{
protected override void ABSMethod1(String var1, String var2)
{
if (var1 == "test")
{
Task.Factory.StartNew(() =>
{
Parallel.ForEach<clssmt>(items, item =>
{
/* ... */
});
});
}
//if i use Task.Wait() freezes UI.
}
protected override void ABSMethod2(int var1, int var2)
{
Task.Factory.StartNew(() =>
{
Parallel.ForEach<clssmt>(items, item =>
{
/* ... */
});
});
}
}
我使用 protected virtual async Task
和 await
解决了这个问题,但我不确定这是否是最佳解决方案。如果我使用此解决方案,消息 "End Procces" 在该任务完成之前很少显示。
i need wait to end of it and show a message "End Process...", how can i solve this?
您将那些已执行的 Task
公开给调用者。您也不通过构造函数调用它们,而是通过初始化方法:
protected abstract Task FirstMethodAsync(string var1, string var2);
protected abstract Task SecondMethodAsync(int var1, int var2);
public async Task InitializeAsync()
{
Console.WriteLine("Start Process ABSMethod1");
await FirstMethodAsync("var1", "var2");
Console.WriteLine("End Process ABSMethod1");
Console.WriteLine("Start Process ABSMethod2");
await SecondMethodAsync(1, 2);
Console.WriteLine("End Process ABSMethod2");
}