gpt4 book ai didi

c# - 对单线程对象依次调用不同的操作

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:31 25 4
gpt4 key购买 nike

我有一种情况,我希望同一个线程执行多个操作。引用以下代码:

namespace ConsoleApplication1
{
public interface ISample
{
void show();
}
class A : ISample
{
public void show()
{
Console.WriteLine("Inside A");

}
}

class B : ISample
{
public void show()
{
Console.WriteLine("Inside B");

}
}

class Program
{
static void Main(string[] args)
{
ISample aObj = new A();
System.Threading.ThreadStart ts1 = new System.Threading.ThreadStart(aObj.show);
System.Threading.Thread t1 = new System.Threading.Thread(ts1);
t1.Start();
t1.Join();
aObj = new B();
t1.Start();
Console.ReadLine();
}
}

以上代码导致异常。我已经看到很多关于重新启动线程的讨论。在我的例子中,我想在同一个线程上一个接一个地执行多个操作。对我来说,我正在寻找在同一线程上从不同对象运行不同方法的解决方案。所有这些对象都是实现与上述代码中相同接口(interface)的类。请建议我执行此操作的最佳方法。换句话说,如果一个方法完成了,那么同一个线程应该启动另一个对象的方法。这可能吗?

最佳答案

您可以尝试将所有需要的方法分组到一个匿名委托(delegate)中:

 Thread t1 = new Thread(
() => {
aObj.show();
bObj.doStuff();
});
t1.Start();

更新:如果事先不知道方法列表,您可以使用 Dispatcher类在特定线程上运行您的方法:

 Thread t1 = new Thread(Dispatcher.CurrentDispatcher.Run);
t1.Start();
Dispatcher.FromThread(t1).Invoke(()=>a.aObj.show());

关于c# - 对单线程对象依次调用不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com