C# 可以将线程与OpenForms一起使用。我的答案是主要问题,我想从另一个线程更新UI,他的“子问题”还有其他方法吗?首选哪种方式?!对不起,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadM
C# 可以将线程与OpenForms一起使用。我的答案是主要问题,我想从另一个线程更新UI,他的“子问题”还有其他方法吗?首选哪种方式?!对不起,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadM,c#,multithreading,C#,Multithreading,可以将线程与OpenForms一起使用。我的答案是主要问题,我想从另一个线程更新UI,他的“子问题”还有其他方法吗?首选哪种方式?!对不起,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadMass你应该读一下斯蒂芬·克利里关于此事的博客。简而言之。使用异步线程的正确方法不是线程。很抱歉,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadMass你应该读一下斯蒂芬·克利
可以将线程与
OpenForms
一起使用。我的答案是主要问题,我想从另一个线程更新UI,他的“子问题”还有其他方法吗?首选哪种方式?
!对不起,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadMass你应该读一下斯蒂芬·克利里关于此事的博客。简而言之。使用异步线程的正确方法不是线程。很抱歉,这是我的错,我没有很好地表达我的问题,我想我必须删除这个question@MadMass为什么不直接编辑?@MadMass你应该读一下斯蒂芬·克利里关于此事的博客。简而言之。使用异步线程的正确方法不是线程。
public delegate int AddItem(object Item);
public Form1 F = (Form1)Application.OpenForms["Form1"];
private static async DoSomething()
{
AddItem ad = new AddItem(F.ls1.Items.Add);
await Task.Run(() =>F.EndInvoke(F.BeginInvoke(add,"NewItem")));
}
F.Invoke((MethodInvoker)delegate { F.ls1.Items.Add("NewItem"); });
F.Invoke((MethodInvoker)delegate { F.AddCategory("NewItem"); });
private static async Task DoSomethingAsync()
{
Progress<object> progress = new Progress<object>(item => F.ls1.Items.Add(item));
await Task.Run(() => BackgroundWork(progress));
}
private static void BackgroundWork(IProgress<object> progress)
{
// Do background work here.
var item = "NewItem";
// Notify UI of progress.
if (progress != null)
progress.Report(item);
}
private static void StartSomething()
{
IObservable<object> items = BackgroundWork();
items.ObserveOn(F).Subscribe(item => F.ls1.Items.Add(item), ex => HandleException(ex));
}