我正在寻找如何做约6个小时,但没找到方法。
有什么办法可以改变流程的父流程吗?一些api maby?
谷歌没有提供太多,同样的网站,所以我打开了新的问题。我要做的是锁定文件供个人使用,然后将其删除。 我在程序A上创建文件并将其与程序B一起使用,当B完成使用时,我用A删除,那就是B创建了一个子进程,它没有B作为他的父进程,所以当我使用时:
File.Open(_moviePath, FileMode.Open, FileAccess.Read, FileShare.Inheritable);
我尝试锁定文件,因为我不希望其他程序/用户能够复制它 它很糟糕。
TNX。
答案 0 :(得分:1)
而不是以这种方式锁定文件,为什么不使用Mutex?它允许跨进程锁定。如果要保留在一个盒子上,这将正常工作。 http://msdn.microsoft.com/en-us/library/bwe34f1k(v=vs.110).aspx
并且您无法将父流程所有者重新分配给子流程。
以下是一个例子,我将在下面解释:http://www.dotnetperls.com/mutex
使用System; 使用System.Threading;
class Program
{
static Mutex _m;
static bool IsMutexExisting(string token)
{
try
{
// Try to open existing mutex.
Mutex.OpenExisting(token);
}
catch
{
return true;
}
// More than one instance.
return false;
}
所以在你的示例程序中,A会做它然后等待..如何让A等待?
让程序尝试打开现有的互斥锁(只有B将创建的互斥锁),例如...... pcode:
while( IsMutexExisting("B Token") == false )
{
System.Threading.Thread.Sleep(500); //sleep for a 1/2 sec
}
//ok, B has created the mutex, let's wait for it to be released indicating it is complete.
Mutex m = Mutex.OpenExisting("B Token");
m.WaitOne(); // will block execution until B releases the Mutex
// lock created, this means B signaled us
// do the rest of A code here...
计划B:
<does what it does>
//Create Mutex to signal A
Mutex m = null;
try{
m =new Mutex(true,"B Token");
...
...
}
finally{
m.ReleaseMutex();
}