从WinForms应用程序中的另一个线程访问由GUI Worker Thread创建的Button,可以使用以下方法:
Control.Invoke()
方法:private void AccessButtonFromAnotherThread(Button button)
{
if (button.InvokeRequired)
{
button.Invoke(new Action<Button>(AccessButtonFromAnotherThread), button);
}
else
{
// 在这里访问按钮
}
}
SynchronizationContext
类:private void AccessButtonFromAnotherThread(Button button)
{
SynchronizationContext synchronizationContext = SynchronizationContext.Current;
synchronizationContext.Post(state =>
{
// 在这里访问按钮
}, null);
}
Task.Run()
和async/await
:private async void AccessButtonFromAnotherThread(Button button)
{
await Task.Run(() =>
{
// 在这里访问按钮
});
}
这些方法可以确保在访问按钮时,不会出现跨线程访问的问题。
领取专属 10元无门槛券
手把手带您无忧上云