小编PVi*_*itt的帖子

从静态方法线程安全返回引用?

我有一节课:

class PrintStringDataBuilder
{
    PrintStringDataBuilder() { }
    public static GetInstance()
    {
        return new PrintStringDataBuilder();
    }

    //other class methods and fields, properties
}
Run Code Online (Sandbox Code Playgroud)

从客户代码访问:

PrintStringDataBuilder instance = PrintStringDataBuilder.GetInstance();
Run Code Online (Sandbox Code Playgroud)

以上是调用线程安全吗?

编辑:只是试图避免编写PrintStringDataBuilder builder = new PrintStringDataBuilder(); 在asp.net mvc web app中多次.PrintStringDataBuilder类中没有其他静态方法,静态字段或静态属性.

c# multithreading

8
推荐指数
2
解决办法
1169
查看次数

订阅后添加可观察序列

我们正在使用Rx来监控Silverlight应用程序中的活动,以便我们可以在一段时间不活动后向用户显示消息.

我们将事件(鼠标移动等)转换为可观察对象,然后将可观察对象合并在一起以创建单个(allActivity)可观察对象.然后,我们使用timepan限制allActivity observable,并且当系统在一段时间内处于非活动状态时,会预订某些通知.

如何在订阅之后向此添加新的observable/sequence(以便订阅选择此选项而不取消订阅和重新订阅).

例如,将几个序列合并在一起,节流,订阅.现在为已订阅的observable添加一个额外的序列.

示例代码:

private IObservable<DateTime> allActivity;
public void CreateActivityObservables(UIElement uiElement)
{
    // Create IObservables of event types we are interested in and project them as DateTimes
    // These are our observables sequences that can push data to subscribers/ observers 
    // NB: These are like IQueryables in the sense that they do not iterate over the sequence just provide an IObservable type
    var mouseMoveActivity = Observable.FromEventPattern<MouseEventHandler, MouseEventArgs>(h => uiElement.MouseMove += h, h => uiElement.MouseMove -= h)
                                      .Select(o => …
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive

7
推荐指数
2
解决办法
2806
查看次数

Thread.ResetAbort的好处

通过Thread.Abort()取消线程时,Thread Thread.Abort内部会抛出一个ThreadAbortException.这导致线程立即停止其工作,并且异常在调用堆栈中冒泡,直到它离开线程的main方法.这会导致线程中止.

线程主方法中调用Thread.ResetAbort()的ThreadAbortException的ExceptionHandler有什么好处,当线程因为跳出其主方法而在catch块之后终止自身时?

private void ThreadMainMethod( )
{
    try
    {
        while(runningAllowed = true)
        {
            //Do some work here
        }
    }
    catch ( ThreadAbortException )
    {
        Thread.ResetAbort( );
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading

6
推荐指数
2
解决办法
4568
查看次数

如何模拟SerialDataReceivedEventArgs

我有一个外围驱动程序,它使用串行端口与外围设备通信.我想对这个驱动程序进行单元测试,并试图模拟串口.因此,我为框架类型SerialPort创建了一个包装器,以使其实现一个接口:

public interface IScannerPort
{
    Handshake Handshake { get; set; }
    bool IsOpen { get; }

    event SerialDataReceivedEventHandler DataReceived;

    void Close( );
    void Open( );
    string ReadLine( );
}
Run Code Online (Sandbox Code Playgroud)

现在我使用moq创建了一个模拟:

Mock<IScannerPort> scannerPort = new Mock<IScannerPort>( );
Run Code Online (Sandbox Code Playgroud)

然后我想提出这个DataReceived事件.但是SerialDataReceivedEventArgs不允许我设置EventType属性.所以我也尝试模拟SerialDataReceivedEventArgs,最后用

Mock<SerialDataReceivedEventArgs> args = new Mock<SerialDataReceivedEventArgs>();
args.SetupProperty(a => a.EventType, SerialData.Eof);
Run Code Online (Sandbox Code Playgroud)

但第二行引发NotSupportedException:非虚拟(在VB中可覆盖)成员上的无效设置:a => a.EventType

我该如何举办活动?或者我如何模拟事件args?

c# unit-testing mstest moq

6
推荐指数
1
解决办法
3223
查看次数

WPF线程C#

我对线程很新.我希望有人可以给我一些例子.

我正在尝试在用户单击开始按钮时启动一个线程并执行以下过程:

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    if (serialPort.IsOpen)
        serialPort.Close();
    try
    {
        //To set all the parameters for Serial Comm
        serialPort.PortName = "COM14";
        serialPort.BaudRate = int.Parse("38400");
        serialPort.Parity = Parity.None;
        serialPort.DataBits = 8;
        serialPort.StopBits = StopBits.One;
        serialPort.Encoding = System.Text.Encoding.ASCII;

        serialPort.DataReceived += new SerialDataReceivedEventHandler(GotRawData);

        serialPort.Open();

        //To show that Com Port is Opened
        txtboxOutput.AppendText(DateTime.Now.ToString("hh:mm:ss tt") + " - COM14 is opened." + Environment.NewLine);
        txtboxOutput.ScrollToEnd();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

private void GotRawData()是一种方法,我可以从硬件中获取一些原始数据.

c# wpf multithreading visual-studio-2010 c#-4.0

6
推荐指数
1
解决办法
2342
查看次数

如何使用IterationPath作为数据源创建新字段

我们希望使用名为Found In Iteration的新字段扩展bug工作项模板.这个字段,应该包含发现错误的迭代.但是当我创建新的字段类型时TreePath,我在将流程模板导入团队项目集合(TPC)时出现错误,说明这TreePath只是一个有效的字段类型IterationPathAreaPath字段.

看着我想知道是否至少有任何方法可以将字段添加到使用迭代路径作为数据源的工作项模板,并将所选值存储在另一个字段中(例如FoundInIteration).

tfs workitem tfs2010 tfs-process-template tfs-workitem

6
推荐指数
1
解决办法
1820
查看次数

如何使用路由命令的文本作为按钮内容

我在视图上有一个按钮,它通过RoutedUICommand绑定到ViewModel中定义的命令.

XAML代码摘自视图:

<Button Content="Login" Command="{Binding Login}" />
Run Code Online (Sandbox Code Playgroud)

在View的CodeBehind中,我将ViewModel中的命令绑定添加到视图的绑定集合中:

this.CommandBindings.Add( viewModel.LoginCommandBinding );
Run Code Online (Sandbox Code Playgroud)

ViewModel本身实现了以下命令:

public class LoginViewModel:ViewModelBase
{

    public ICommand Login { get; private set; }
    public CommandBinding LoginCommandBinding { get; private set; }

    public LoginViewModel( ) {
        this.Login = 
            new RoutedUICommand( "Login", "Login", typeof( Window ) );
        this.LoginCommandBinding = 
            new CommandBinding( Login, LoginCommandHandler, CanExecuteHandler );
    }

    void LoginCommandHandler( object sender, ExecutedRoutedEventArgs e ) {
        //Put code here
    }

    void CanExecuteHandler( object sender, CanExecuteRoutedEventArgs e ) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此命令被定义为文本和名称"登录".按钮本身的内容为"登录".有没有办法使用命令的文本作为按钮的内容?

wpf xaml commandbinding

5
推荐指数
3
解决办法
4070
查看次数

是否可以指定每个文件的锁定类型?

我们在存储库中有一个excel表,用于代码生成.当任何开发人员签出excel表时,不应该由其他任何人签出.这可以通过检出对话框指定"检出锁定类型"来完成.但这必须由开发人员手动完成.有没有办法强制在几个文件上使用此锁定类型,以便自动使用它?

tfs tfs2010 vcs-checkout

4
推荐指数
1
解决办法
1425
查看次数

"使用SqlDataReader时,无法尝试在读取器关闭时调用Read"

1)我有以下代码:

private static sqlDataReader gCandidateList = null;

public SqlDataReader myCandidateList
{
    set
    {
        gCandidateList = value;
    }
    get
    {
        return gCandidateList;
    }
}
Run Code Online (Sandbox Code Playgroud)

2)在FormA中我有:

sqlConn.ConnectionString = mySettings.myConnString;
sqlConn.Open();
SqlCommand cmdAvailableCandidate = new SqlCommand(tempString, sqlConn);
SqlDataReader drAvailableCandidate = cmdAvailableCandidate.ExecuteReader();
mySettings.myCandidateList = drAvailableCandidate;
sqlConn.Close();
Run Code Online (Sandbox Code Playgroud)

3)在FormB中我想重用myCandidatList中保存的数据,所以我使用:

SqlDataReader drCandidate = mySettings.myCandidateList;
drCandidate.Read();
Run Code Online (Sandbox Code Playgroud)

4)然后我收到错误"当读取器关闭时,Invalide尝试调用Read."

5)我在上面的(3)中尝试了mySettings.myCandidateList.Read()并再次收到相同的错误消息.

6)如何重新打开SqlDataReader drCandidate来读取数据?

7)非常感谢您的建议和帮助.

c# sqldatareader

4
推荐指数
1
解决办法
2万
查看次数

比较两个指针

我最近遇到了如何比较Fortran中的两个指针的问题.在C中,可以比较两个指针(pA == pB)(带pApB指针),因为它们只是地址.但是fortran指针不仅仅是纯内存地址.代码if(pa.ne.pb)(带有papb是同一类型的指针)给了我一个错误

比较运算符'.ne.'的操作数 at(1)是TYPE(sometype)/ TYPE(sometype)

其中sometype是指针指向的类型.

有没有办法比较两个指针是否指向同一个目标?或者我是否必须为.ne.指向的类型创建一个-operator?

fortran pointers fortran90

4
推荐指数
1
解决办法
1011
查看次数