Поток s
пытается запустить делегат в потоке пользовательского интерфейса, что означает, что он ничем не отличается от прямого вызова SeekProcName(procName)
в обработчике событий.
Было бы лучше использовать Task.Run
и async/await
для запуска проверки в фоновом потоке.Когда await
возвращается, выполнение возобновляется в потоке пользовательского интерфейса, что означает, что пользовательский интерфейс может быть обновлен без необходимости Invoke
или BeginInvoke
private async void scanBtn_Click (object sender, RoutedEventArgs e)
{
InfoTxt.Text = "[ WAITING FOR PROCESS TO OPEN ]";
//Read the textbox contets *before* starting the task
var name=pName.Text;
var p=await Task.Run(()=>SeekProcName(name));
if (p!=null)
{
InfoTxt.Text = "[ FOUND ]";
}
}
Это может быть вызвано в цикле с небольшой задержкой междуитерации, без блокировки потока пользовательского интерфейса:
private async void scanBtn_Click (object sender, RoutedEventArgs e)
{
while(someCondition)
{
InfoTxt.Text = "[ WAITING FOR PROCESS TO OPEN ]";
var name=pName.Text;
var p=await Task.Run(()=>SeekProcName(name));
if (p!=null)
{
InfoTxt.Text = "[ FOUND ]";
}
await Task.Delay(1000);
}
}