C#中不同线程间怎样调用

如题所述

不知道你要实现什么,但肯定要用到委托.如果是子线程和窗体之间,还需要用到Invoke举个例子,两个线程 a - b间通讯using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;namespace demo
{
class Program
{
static void Main(string[] args)
{
a a1 = new a();
b b1 = new b();
a1.ass += b1.show;
a1.chkStop += b1.chkStop;
Thread ta = new Thread(new ThreadStart(a1.start));
Thread tb = new Thread(new ThreadStart(b1.start));
tb.Start();
ta.Start();
}
}
class a
{
public delegate void ashow(string a);
public event ashow ass;
public delegate void aCall(bool isStop);
public event aCall chkStop;
public void start()
{
if (ass != null)
{
ass("在线程a中调用b Class中的方法Show");
chkStop(false);
Console.WriteLine("a线程 : 通知b线程结束!");
Console.WriteLine("a线程 : 准备结束,按任意键退出!");
Console.ReadKey();
}
}
}
class b
{
public bool flag = true;
public void show(string b)
{
Console.WriteLine("b线程 : {0}", b);
}
public void chkStop(bool i)
{
flag = i;
}
public void start()
{
while (flag)
{
Thread.Sleep(10);
}
Console.WriteLine("b线程 : 线程结束");
}
}
}
温馨提示:内容为网友见解,仅供参考
无其他回答

c#如何在多线程的子线程里调用外部程序。并运行10秒如何终止它。。_百...
1.新开的线程是无法直接访问UI控件的,如果需要访问,可以通过控件的Invoke方法,或者用 System.Threading.SynchronizationContext.Current.Post方法 2.一定不要在控件的内部事件处理方法里面使用Sleep等线程暂停方法!像我这样写就不会阻塞了:private void button1_Click(object sender, EventArgs e){ Syst...

C# 不同窗体 不同线程间传递数据
具体的做法:在B里声明一个事件(委托),暴露出去给A,A可以用自己的一个方法去进去监听,监听这个动作需要你实例化B的时候来完成。而B需要决定什么时候来触发这个事件。从你的问题来看,应该是在接受到数据的时候去触发这个事件。具体的Code:namespace Test{ public delegate void SendMessageEventHandle...

C#中多个线程调用同一个方法,方法的变量是公有变量,怎样进行方法的调用...
最简单的方法,把这个变量加锁,或者把函数方法加锁,使其同一时间只能被一个线程调用。但这样牺牲了效率,所以首先你还是得思考以下问题:1.这个变量值会被其他线程改变吗?如果1的回答是否定的,那么线程之间应该不会受影响如果是肯定的,思考问题:2.一定要在其他线程中改变这个变量吗?如果是否定的,考虑使用临时变量或者...

c#中跨线程异处理的方式
C#要这种注意跨线程的问题,invoke前提是创建了句柄,有handle被创建,没有句柄你去invoke就会报错。在窗体开始绘制的的时候这个时候不一定代表初始化结束了,这时候你引入线程去invoke去跨线程某个控件是错误的,所以初始化线程我们需要把变量存储在内存中。Invoke(new MethodInvoker(delegate{ }));这个用法...

C# 跨线程调用TextBox方法浅析
首先来看下面代码:主线程:delegate void SetTextCallback(string text);private void SetText(string text){if (this.textBox1.InvokeRequired){SetTextCallback d = new SetTextCallback(SetText);this.Invoke(d, new object[] { text });}else{this.textBox1.Text = text;}}private void...

c#中线程怎么间通信
C# 中线程之间进行通信是程序并行执行的关键。通过以下方式,线程可以实现有效交流:首先,共享变量的使用。多个线程共享一个变量,通过对其的读写操作,可以实现信息交换。然而,这种方式需要特别注意线程安全问题,防止数据竞争。其次,信号量的引入实现同步与互斥。信号量控制线程对资源的访问,确保资源在同一...

在C#中如何使用多线程,每隔几秒去执行一个方法?
\/\/\/ \/\/\/ 简单的 线程执行的 方法.\/\/\/ \/\/\/ 这个方法是 静态的 \/\/\/ public static void ThreadFunc(){ \/\/ 线程停止运行的标志位.Boolean done = false;\/\/ 计数器 int count = 0;while (!done){ \/\/ 休眠1秒.Thread.Sleep(1000);\/\/ 计数器递增 count++;\/\/ 输出.Console.WriteLine...

c#中如何跨线程调用windows控件
在辅助线程调用(在创建辅助线程时可将此方法通过delegate传到辅助线程中)下面的方法InvokeControl();\/\/写在主线程中(windows控件)private void InvokeControl(){ if (this.InvokeRequired)this.Invoke(new DelegateChangeText(ChangeText));else this.ChangeText();} private void ChangeText(){ this.Text...

如何用C#编写多线程的与窗体交互的程序
CheckForIllegalCrossThreadCalls = false;但是,这样做是不推荐的。一般对于UI元素的跨线程操作推荐使用 Form.Invoke(Delegate method);Form.Invoke(Delegate method, params object[] args);Invoke方法可以由任何线程调用,但只会在创建Form的主线程上执行相应的Delegate。一段最简示例如下:private void ...

C#中的多线程问题用于什么地方?怎么掌握?
一个线程不能对另一个线程调用Sleep ,但是一个线程可以对另一个线程调用Suspend。还可以使用许多其它的方式来阻塞线程。例如,可以通过调用 Thread.Join 使一个线程等待另一个线程(子线程)停止。使用 Monitor.Wait使一个线程等待访问一个同步对象。5.关键字lock可以把一段代码定义为互斥段(critical ...

相似回答