但是,现在我都了其他的操作,在Method_Loop()方法正常运行的情况下,我新增的其他操作。
Thread th = new Thread(new ThreadStart(Method_Loop)); //循环调用,20s一次
MeasThread.Reset();
//其它略
private static Method_Loop() //周期性的过程
{
// .....
//...
调用了clsCom.Common_A()
}
///类
class clsCom
{
public static void Common_A()
{
//...
//....
//调用底层的接口
}
}
这时候我新添加一个操作,Test_Click()中也调用到了clsCom.Common_A()
public Test_Click()
{
//code.....
调用clsCom.Common_A()
}
如果我调试的情况下Test_Click()设置一个断点,一直跟踪下去跑完这个流程(从开始到调用完clsCom.Common_A()),没什么问题,达到了想要的效果。
但是,如果我直接运行Test_Click()方法,会抛出"调用的目标无效",应该是没有跑到clsCom.Common_A()中去,线程冲突了还是别的原因。。。
后来在想试用this.Invoke()委托调用clsCom.Common_A(),但是在类中这个好像不行,而且静态方法中没this,
后来又试着用
public static void Common_A()
{
Lock(Object)
{
//调用底层的接口
}
}
或者用Mutex处理,都没有成功。
问题出在哪里,各位大侠知道的指点下,在线等待,先谢过了。。。。。
9 个解决方案
#1
Test_Click方法里,在调用clsCom.Common_A()前加一句WaitOne()方法等一下试试?
#2
通过互斥锁,使得一个线程在使用时候,其他所有的线程都无法使用
#4
今天有其他事情,还没去试你讲的建议。
不过发帖前我试过
public static void Common_A()
{
bool canCreateNew;
Mutex m = new Mutex(true, "test", out canCreateNew);
if (canCreateNew)
{
//调用底层的接口
}
m.ReleaseMutex();
}
没有成功,难道这种互斥锁做法不行,期待你的回答。。。。
#5
互斥锁 试过了 好像还是不行咯 难道是其它原因。。。
#6
我是这样写的,大家帮忙看看哪里写的不对,十分急用,谢谢大家了:
//共享的互斥锁
class shareRes
{
public static Mutex mutex = new Mutex();
}
//上面的循环过程调用的类
class Thread_Loop
{
public Thread thrd;
public Thread_Loop(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
//Test_Click调用的类
class Thread_Click
{
public Thread thrd;
public Thread_Click(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
然后在调用的时候初始化
//周期性的过程,这个过程比Test_Click()先进行,它可能一直占用公用方法clsCom.Common_A()
private static Method_Loop()
{
// .....
//...启动
Thread_Loop mthrd1 = new Thread_Loop("Thread_Loop thread ");
mthrd1.thrd.Join();
}
//我点击的事件发生,还想优先处理此事件
public Test_Click()
{
//code.....启动
Thread_Click mthrd2 = new Thread_Click("Thread_Click thread ");
mthrd2.thrd.Join();
}
//共享的互斥锁
class shareRes
{
public static Mutex mutex = new Mutex();
}
//上面的循环过程调用的类
class Thread_Loop
{
public Thread thrd;
public Thread_Loop(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
//Test_Click调用的类
class Thread_Click
{
public Thread thrd;
public Thread_Click(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
然后在调用的时候初始化
//周期性的过程,这个过程比Test_Click()先进行,它可能一直占用公用方法clsCom.Common_A()
private static Method_Loop()
{
// .....
//...启动
Thread_Loop mthrd1 = new Thread_Loop("Thread_Loop thread ");
mthrd1.thrd.Join();
}
//我点击的事件发生,还想优先处理此事件
public Test_Click()
{
//code.....启动
Thread_Click mthrd2 = new Thread_Click("Thread_Click thread ");
mthrd2.thrd.Join();
}
#7
学习。帮顶
#8
怎么没人帮顶啊。。。
#9
已经发到你邮箱了。
#1
Test_Click方法里,在调用clsCom.Common_A()前加一句WaitOne()方法等一下试试?
#2
通过互斥锁,使得一个线程在使用时候,其他所有的线程都无法使用
#3
#4
今天有其他事情,还没去试你讲的建议。
不过发帖前我试过
public static void Common_A()
{
bool canCreateNew;
Mutex m = new Mutex(true, "test", out canCreateNew);
if (canCreateNew)
{
//调用底层的接口
}
m.ReleaseMutex();
}
没有成功,难道这种互斥锁做法不行,期待你的回答。。。。
#5
互斥锁 试过了 好像还是不行咯 难道是其它原因。。。
#6
我是这样写的,大家帮忙看看哪里写的不对,十分急用,谢谢大家了:
//共享的互斥锁
class shareRes
{
public static Mutex mutex = new Mutex();
}
//上面的循环过程调用的类
class Thread_Loop
{
public Thread thrd;
public Thread_Loop(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
//Test_Click调用的类
class Thread_Click
{
public Thread thrd;
public Thread_Click(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
然后在调用的时候初始化
//周期性的过程,这个过程比Test_Click()先进行,它可能一直占用公用方法clsCom.Common_A()
private static Method_Loop()
{
// .....
//...启动
Thread_Loop mthrd1 = new Thread_Loop("Thread_Loop thread ");
mthrd1.thrd.Join();
}
//我点击的事件发生,还想优先处理此事件
public Test_Click()
{
//code.....启动
Thread_Click mthrd2 = new Thread_Click("Thread_Click thread ");
mthrd2.thrd.Join();
}
//共享的互斥锁
class shareRes
{
public static Mutex mutex = new Mutex();
}
//上面的循环过程调用的类
class Thread_Loop
{
public Thread thrd;
public Thread_Loop(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
//Test_Click调用的类
class Thread_Click
{
public Thread thrd;
public Thread_Click(string name)
{
thrd = new Thread(this.run);
thrd.Name = name;
thrd.Start();
}
void run()
{
shareRes.mutex.WaitOne();
//.....调用公用方法
调用了clsCom.Common_A()
shareRes.mutex.ReleaseMutex();
}
}
然后在调用的时候初始化
//周期性的过程,这个过程比Test_Click()先进行,它可能一直占用公用方法clsCom.Common_A()
private static Method_Loop()
{
// .....
//...启动
Thread_Loop mthrd1 = new Thread_Loop("Thread_Loop thread ");
mthrd1.thrd.Join();
}
//我点击的事件发生,还想优先处理此事件
public Test_Click()
{
//code.....启动
Thread_Click mthrd2 = new Thread_Click("Thread_Click thread ");
mthrd2.thrd.Join();
}
#7
学习。帮顶
#8
怎么没人帮顶啊。。。
#9
已经发到你邮箱了。