Как собрать проект с этим кодом без ошибки
using System.Reactive.Linq;
using System.Reactive.Concurrency;
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
private void Form1_Load(object? sender, EventArgs e)
{
Observable.Interval(TimeSpan.FromSeconds(1))
.ObserveOn(this) //тут ОШИБКА: не удается преобразовать из "WinFormsApp1.Form1" в "System.Reactive.Concurrency.IScheduler".
.Subscribe(x => label1.Text = DateTime.Now.ToLongTimeString());
}
}
}
Ответы (2 шт):
Автор решения: Tigran Grigoryan
→ Ссылка
В вашем коде возникает ошибка, потому что метод ObserveOn требует объект типа IScheduler, который предоставляет планировщик для обработки событий Rx.
Немножко поменял ваш код, должно работать.
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Load += Form1_Load;
}
private void Form1_Load(object sender, EventArgs e)
{
Observable.Interval(TimeSpan.FromSeconds(1))
.ObserveOn(DispatcherScheduler.Current) // Здесь используем DispatcherScheduler
.Subscribe(x =>
{
label1.Invoke((Action)(() => label1.Text = DateTime.Now.ToLongTimeString()));
});
}
}
}
Автор решения: Леонид Дубовик
→ Ссылка
Чтобы не было ошибки (для проекта созданного в WinForm) нужно создать проект не в .NET 7.0 а в .NET Framework.